8

私は「プログラマーのように考える」という本からプログラミング スキルを学んでおり、このようなピラミッドを表示するように依頼されました。

########
 ######
  ####
   ##

私はこのコードでそれをしました

for(int i = 0; i < 4; i++){

    for(int k = 0; k < i; k++)
        cout << ' ';

    for(int j = 0; j < 8 - i * 2; j++)
        cout << '#';

    cout << '\n';
}

しかし... 質問は "この章の前半の形状プログラムと同じ規則 (ハッシュ記号を出力するステートメントと行末を出力するステートメントの 2 つだけ) を使用して、以下を生成するプログラムを作成します。次の形: "

よくわかりませんが、このようなものを2つのステートメントだけでスペース文字を使用せずに表示することは可能ですか?

編集。

答えてくれてありがとう。しかし、著者によると、これは と のみで行う必要がcout << '#'ありcout << '\n'ます。いくつかのメソッドや関数を操作することはオプションではないように思われるため、ここに私のポイントがあります。

cout << "#" と cout << "\n" の 2 つの出力ステートメントのみを使用して、次のような形のハッシュ記号のパターンを生成するプログラムを作成します。もちろん 、ループを使用して :P

4

4 に答える 4

10
#include <iostream>
#include <iomanip>
#include <string>

using namespace std;

int main()
{
    for(int i = 0; i < 4; i++) {
        cout << setw(8-i) << string(8-i*2, '#') << endl;
    }
    return 0;
}
于 2013-05-14T22:39:53.807 に答える
7

残念ながら、この質問への答えはもっと単純です: 作者の誤りです。これらの最初のいくつかの質問は、単一のスペース出力も使用できるように表現されている必要があります (cout << " ";)。編集中にこれを見逃した理由はわかりません。混乱を招いてしまったことをお詫び申し上げます。一般に、読者に「掘り下げ」を強いることを目的とした演習は、その点で明らかです。

ところで、これと初版からの他の問題は、私のサイトで見つけることができる文書で議論されています。この本についてさらに質問や問題がある場合は、私に連絡してください。

于 2013-05-24T02:18:54.670 に答える
0

を使用しないという「芸術」に関するものかどうかはわかりませんcout << ' 'が、その場合、別のきちんとした解決策があります。

#include <iostream>

int main() {
    for (int i = 0; i < 4; ++i, std::cout << '\n') {
        for (int j = 0; j < 8-i; ++j) {
            std::cout << (char)('#' - 3*(j<i));
        }
    }
}

' 'そして、 for ループを 1 つだけ使用して、明示的に記述するのではなく、ASCII 表現を使用する、さらにあいまいな別のバージョン:

int main() {
    for (int i = 1; i < 37; ++i) {
        std::cout << (char)(35-3*((i%9)<=((i-1)/9)) - 3*((i%9)>=(9-(i-1)/9)) \
            - 22*(!(i%9)) );
    }
}

これが良いプログラミング手法であるとは言いませんが、最終的にはすべての数値とレジスタであることを誰かが認識するのに役立つかもしれません。

于 2013-05-23T16:25:07.660 に答える