0

プログラミング コンテストでこの質問に出くわしましたが、答えが見つかりませんでした。だれか助けてください。

Input<<string
Output<<reverse(string)

制約: ループは許可されません。組み込み関数を使用する必要はありません!

4

2 に答える 2

7

再帰を使用します。

#include <stdio.h>

void print_reversed(const char* str) {
  if (*str) {
    print_reversed(str + 1);
    printf("%c", *str);
  }
}

int main() {
  print_reversed("abcdef");
  printf("\n");
}
于 2013-03-21T16:45:05.573 に答える
2

再帰を使用するという NPE のヒントに基づいて具体的な答えを出すには、文字列の末尾を見つけることと、実際にすべてを交換することの 2 つの目的で再帰を使用する必要があります。

このアプローチを説明する完全なプログラムを次に示します (実行を参照してください)。

#include <stdio.h>

char * find_end_of_string(char *str)
{
    return *str ? find_end_of_string(str + 1) : str;
}

void do_reverse_string(char *a, char *b)
{
    char tmp;

    if (a < b) {
        tmp = *a;
        *a = *b;
        *b = tmp;

        do_reverse_string(a + 1, b - 1);
    }
}

void reverse_string(char *str)
{
    do_reverse_string(str, find_end_of_string(str) - 1);
}

int main() {
    char odd[] = "abcde";
    char even[] = "abcdef";

    reverse_string(odd);
    reverse_string(even);

    printf("%s\n%s\n", odd, even);

    return 0;
}
于 2013-03-21T16:54:19.160 に答える