プロが教える店舗&オフィスのセキュリティ対策術

プログラミング for文

プログラミングの問題です。
「自然数nを入力し、以下のようなパターンが出力されるようなプログラムをfor文を使って作成せよ。」
(例:n=3のとき)

% ./a.out
n: 3
*
**
***
*__*
**_**
******
*__*__*
**_**_**
*********

(例:n=4のとき)

% ./a.out
n: 4
*
**
***
****
*___*
**__**
***_***
********
*___*___*
**__**__**
***_***_***
************
*___*___*___*
**__**__**__**
***_***_***_***
****************

(_で空白を表しましたが、上手く見られないかもしれません…。小さい直角三角形が下に行くにつれ1個ずつ増え、全体的にみると大きい直角三角形が見えるイメージです。)
つまり、n=3なら、
*
**
***
を単位として、1~3行目にはこれが1つ、4~6行目にはこれが2つ、7~9行目にはこれが3つあります。
一般に、
*
**
***

********(←n個)
を単位とし、n^2-2~n^2行目にこれがn個あるようなパターンです。

私はまず、単位パターンをプログラムしました。
#include <stdio.h>

main()
{
___int n, i, j;
___printf("n: ");
___scanf("%d", &n);

___for (i=1; i<=n; i++) {
______for (j=1; j<=i; j++) {
_________printf("*");
______}
______printf("\n");
___}
}
(_は空白です)
しかし、単位パターンを横に2個、3個と並べるプログラムが分かりません。
さらにfor文を使い、3重、4重にするのですか?どなたか教えてください。

A 回答 (3件)

要素から考えたらこんな感じ



#include <stdio.h>

int main()
{
 int n;
 int i,j,k,m;

 printf("n:");
 scanf("%d", &n);

 // 縦のnブロック分の繰り返し
 for (i = 1; i <= n; i++) {
  // 縦n行分の繰り返し
  for (j = 1; j <= n; j++) {
   // 横全体の繰り返し
   for (k = 1; k <= i; k++) {
    // 単位「*」の繰り返し
    for (m = 1; m <= j; m++) {
     putchar('*');
    }
    if (k == i) {
     putchar('\n');
     break;
    }
    // 「 」の繰り返し
    for (m = n - j; m > 0; m--) {
     putchar(' ');
    }
   }
  }
 }
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2010/05/26 22:11

ミスった。

9行目修正
http://ideone.com/bAarZ
    • good
    • 0

できればn * nの正方形を「いくつ」積み重ねるのか、という発想まで来て欲しいかな。


#絵に描かずに、塊を何個表示しなきゃいけないか、いくつ*を連続させないといけないか、の数字のリストをつくるだけでもいい。
#ごちゃごちゃしているけどループは内側から考えてます。

http://ideone.com/Bx3Wa
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2010/05/26 22:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!