-3

わかりました、私はこの問題を理解できません。2文字を入力する文字で任意のサイズの三角形を印刷する必要があります。例: range(c, j) で、再帰的でなければなりません。コードにループを含めることはできません。出力は次のようになります。

         A
        ABA
       ABCBA
      ABCDCBA
     ABCDEDCBA
    ABCDEFEDCBA
   ABCDEFGFEDCBA

などなど・・・で、気がつけば、最新の文字まで順送りしてから、逆順で印刷。これを行う方法に関する提案は大歓迎です。

編集:私はカンニングしようとしていません。私はこれにアプローチする方法に完全に行き詰まっているので、プログラム全体のコードを誰かに教えてもらうのではなく、それについての提案を求めています。ありがとう。

4

2 に答える 2

0

aardvarkk のソリューションが最適ですが、機能が 1 つしかないバージョンが必要な場合:

#include <iostream>
using namespace std;


void recursivePrintLettersTriangle (char start, char end, char current, int space, bool newLine) {
    // Print spaces
    if ((current + space) < end) {
        std::cout << ' ';
        recursivePrintLettersTriangle(start, end, current, space + 1, newLine);
    // Print letters
    } else if (start <= current) {
        std::cout << start;

        if (start < current) {
            recursivePrintLettersTriangle(start + 1, end, current, space, false);
            std::cout << start;
        }

        // Go to next line
        if (newLine) {
            std::cout << std::endl;

            if (current < end) {
                recursivePrintLettersTriangle(start, end, current + 1, 0, newLine);
            }
        }
    }
}

void showLettersTriangle (char start, char end) {
    recursivePrintLettersTriangle(start, end, start, 0, true);
}

int main() {
    showLettersTriangle('a', 'g');

    return 0;
}
于 2014-10-23T23:31:06.877 に答える
-1

これはあなたを助けるでしょう。ここで試してみてください

#include <iostream>
using namespace std;

void spaces(char space) {
    if (space <= 0) {
        return;
    }
    std::cout << " ";
    spaces(space-1);
}

void line(char start, char end, char space) {
    if (start != end) {
        std::cout << start;
        line(start+1, end, space-1);
        std::cout << start;
    } else {
        std::cout << end;
    }
}

void countdown(char start, char end, char space) {
    ++space;
    if (start != end) {
        countdown(start, end-1, space);
    }
    spaces(space);
    line(start, end, space);
    spaces(space);
    std::cout << std::endl;
}

void range(char start, char end) {
    countdown(start, end, 0);
}

int main() {
    range('a', 'g');
    return 0;
}
于 2014-10-23T20:03:32.730 に答える