課題についての質問です。
-
keiji
課題についての質問です。
法則性といったものが理解できず、困っています。
n = 3 を入力した場合
*
**
***
* *
** **
******
* * *
** ** **
*********
n = 4 の場合は、
*
**
***
****
* *
** **
*** ***
********
* * *
** ** **
*** *** ***
************
* * * *
** ** ** **
*** *** *** ***
****************
を表示するプログラムです。
分かる方がいましたらよろしくお願いします。
n = 3 を入力した場合
*
**
***
* *
** **
******
* * *
** ** **
*********
n = 4 の場合は、
*
**
***
****
* *
** **
*** ***
********
* * *
** ** **
*** *** ***
************
* * * *
** ** ** **
*** *** *** ***
****************
を表示するプログラムです。
分かる方がいましたらよろしくお願いします。
- bitter_fox
- 記事: 607
- 登録日時: 15年前
- 住所: 大阪府
Re: 課題についての質問です。
色付けしてみました。恐らくこれで分かるはずです。keiji さんが書きました:法則性といったものが理解できず、困っています。
n=3
*
**
***
* *
** **
******
* * *
** ** **
*********
n=4
*
**
***
****
* *
** **
*** ***
********
* * *
** ** **
*** *** ***
************
* * * *
** ** ** **
*** *** *** ***
****************
[hr][追記]
スペースの数がシステムの都合上分からないので別途記しました。
最後に編集したユーザー bitter_fox on 2011年6月05日(日) 20:23 [ 編集 1 回目 ]
Re: 課題についての質問です。
半角スペースが表示上消えているようですが、以下の表示でよろしいでしょうか?
codeタグを使えば、きれいに表示できます。
この三角形が一塊になっていることは、わかるでしょうか?
また、問題を少し簡単にして、(☆)
n = 2のとき、 n = 3のとき、 と表示するプログラムは書けますか?
(編集履歴)
(☆)以降を変更しました。
*
**
***
****
* *
** **
*** ***
********
* * *
** ** **
*** *** ***
************
* * * *
** ** ** **
*** *** *** ***
****************
この三角形が一塊になっていることは、わかるでしょうか?
また、問題を少し簡単にして、(☆)
n = 2のとき、 n = 3のとき、 と表示するプログラムは書けますか?
(編集履歴)
(☆)以降を変更しました。
最後に編集したユーザー a5ua on 2011年6月05日(日) 20:58 [ 編集 1 回目 ]
-
keiji
Re: 課題についての質問です。
返信ありがとうございます。
スペースが足りてませんでした。
申し訳ないです。
三角形の塊まではできるのですが、
それ以下の表示の仕方がよく分からないです。
スペースが足りてませんでした。
申し訳ないです。
三角形の塊まではできるのですが、
それ以下の表示の仕方がよく分からないです。
- bitter_fox
- 記事: 607
- 登録日時: 15年前
- 住所: 大阪府
Re: 課題についての質問です。
スペースの入れ方が分からないというのは、スペースの個数が分からないのでしょうか?keiji さんが書きました:スペースの入れ方などちょっと分からないので、
もう少し時間が掛かりそうです。
それともプログラミング的にスペースを表示する方法が分からないのでしょうか?
-
keiji
Re: 課題についての質問です。
スペースを入れた後にまた*を入れるのか、
ある始点を決めてそこから、*を連続させているのか
という感じです。
根本から分かっていないため、この文の内容すら理解不可能かもしれません。
よろしくお願いします。
ある始点を決めてそこから、*を連続させているのか
という感じです。
根本から分かっていないため、この文の内容すら理解不可能かもしれません。
よろしくお願いします。
- bitter_fox
- 記事: 607
- 登録日時: 15年前
- 住所: 大阪府
Re: 課題についての質問です。
と常に末尾にいくつかのスペースを挟んで表現する方法と、(スペースは実際の表現上見えないのでこの方法が通用します。)keiji さんが書きました:スペースを入れた後にまた*を入れるのか、
ある始点を決めてそこから、*を連続させているのか
という感じです。
根本から分かっていないため、この文の内容すら理解不可能かもしれません。
よろしくお願いします。
p段目のp個目の時はスペースを挟まずにそれ以外の時だけいくつかのスペースを挟んで表現する方法の二つのアプローチがあります。
手抜きをするなら1つ目のアプローチ、課題の完成度の確実さを目指すなら2つ目のアプローチをお勧めします。(と言っても分岐一つしか違いはありませんが・・・w)
またスペースの個数は、mを行数として次のようになり
全て2段目
n = 1 (n = 1は課題の答えとなるプログラムを実行しても表示されません) スペース:0
n = 2 スペース:1, 0
n = 3 スペース:2, 1, 0
n = 4 スペース:3, 2, 1, 0
これらから、スペースの個数とnとmの関係を調べれば求まります。
(考えの都合上1オリジンになっています。)
- bitter_fox
- 記事: 607
- 登録日時: 15年前
- 住所: 大阪府
Re: 課題についての質問です。
ある個数の*を置けたのであれば同じ方法で実現できますよ。keiji さんが書きました:どうも、ある個数のスペースのあけ方と
そこからまた*を置く方法がわかりません。。
再び*を置いていくにはループを使用してください。
ソースコードを張っていただくともう少し詳しく言えるのですか・・・
-
keiji
Re: 課題についての質問です。
すいません。
<code>
#include<stdio.h>
int main(void)
{
int n, i, j;
printf("n = ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}
</code>
でずっと止まったままです。
2段目以降はまったくで、、、
<code>
#include<stdio.h>
int main(void)
{
int n, i, j;
printf("n = ");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
printf("*");
}
printf("\n");
}
</code>
でずっと止まったままです。
2段目以降はまったくで、、、
-
keiji
Re: 課題についての質問です。
いいですよ。
次に、この図形をn回繰り返すように、してみてください。カウンタ変数を例えばkにしましょう。
n = 3
*oo
**o
***
*oo
**o
***
*oo
**o
***
これができたら、k回目の図形は改行するまでに、この1行の図形をk回繰り返せば良いので、ふたたびforで囲みます。
じゃ、がんばって。
次に、この図形をn回繰り返すように、してみてください。カウンタ変数を例えばkにしましょう。
n = 3
*oo
**o
***
*oo
**o
***
*oo
**o
***
これができたら、k回目の図形は改行するまでに、この1行の図形をk回繰り返せば良いので、ふたたびforで囲みます。
じゃ、がんばって。
non
-
keiji
Re: 課題についての質問です。
#include<stdio.h>
int main(void)
{
int n, i, j, k,l;
printf("n = ");
scanf("%d", &n);
for(l = 1; l < n; l++){
for(k = 1; k <= n; k++){
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
printf("*");
}
for (j = 1;j<=n - i; j++) {
printf("o");
}
printf("\n");
}
}
}
return 0;
}
それのいれどころがイマイチ分からないです。
Re: 課題についての質問です。
>これができたら、k回目の図形は改行するまでに、この1行の図形をk回繰り返せば良いので、ふたたびforで囲みます。
説明の仕方が悪かったみたいですね。
1行を表示する部分をk回繰り返すのです。もちろん改行は最後に1回。
説明の仕方が悪かったみたいですね。
1行を表示する部分をk回繰り返すのです。もちろん改行は最後に1回。
non
-
keiji
Re: 課題についての質問です。
#include<stdio.h>
int main(void)
{
int n, i, j, k,l;
printf("n = ");
scanf("%d", &n);
for(l = 1; l < n; l++){
for(k = 1; k <= n; k++){
for (i = 1; i <= n; i++) {
for (j = 1; j <= i; j++) {
printf("*");
}
for (j = 1;j<=n - i; j++) {
printf("o");
}
printf("\n");
}
}
}
return 0;
}
直角三角形状までもっていく条件がうまくいきません。
-
keiji
- bitter_fox
- 記事: 607
- 登録日時: 15年前
- 住所: 大阪府
Re: 課題についての質問です。
実はかなり良い所まで行けています。keiji さんが書きました:ここまで来たのですが、分岐条件と#include<stdio.h> int main(void) { int n, i, j, k,l; printf("n = "); scanf("%d", &n); for(l = 1; l < n; l++){ for(k = 1; k <= n; k++){ for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { printf("*"); } for (j = 1;j<=n - i; j++) { printf("o"); } printf("\n"); } } } return 0; }
それのいれどころがイマイチ分からないです。
変数名といくつかのコメントを補っておきましたので、???を埋めてみてください。(printf("\n")も三つの内から適切なものを選んでください)
それぞれのforの意図と変数の持つ意味を考えると分かりやすいでしょう。
#include <stdio.h>
int main()
{
int n, i, j, starCount, blockCount;
printf("n = ");
scanf("%d", &n);
for (blockCount = 1; blockCount <= n; blockCount++) // 出力しようとしているブロック数
{
for (starCount = 1; starCount <= n; starCount++) // 出力しようとしている1セット(**ooなど)の*の数
{
for (i = 1; i <= ???; i++) // 一行について何セット出力するか(セット数 == 出力しようとしているブロック数)
{
for (j = 1; j <= ???; j++) // 1セット分の*を出力
{
printf("*");
}
for (j = 1; j <= n - ???; j++) // 1セット分のスペース(o)を出力
{
printf("o");
}
//printf("\n");
}
//printf("\n");
}
//printf("\n");
}
}
nの入力処理を忘れてたので修正しました
-
keiji
Re: 課題についての質問です。
できました!
これでどうでしょうか?
これでどうでしょうか?
#include <stdio.h>
int main()
{
int n, i, j, starCount, blockCount;
printf("n = ");
scanf("%d", &n);
for (blockCount = 1; blockCount <= n; blockCount++) // 出力しようとしているブロック数
{
for (starCount = 1; starCount <= n; starCount++) // 出力しようとしている1セット(**ooなど)の*の数
{
for (i = 1; i <= blockCount; i++) // 一行について何セット出力するか(セット数 == 出力しようとしているブロック数)
{
for (j = 1; j <= starCount; j++) // 1セット分の*を出力
{
printf("*");
}
for (j = 1; j <= n - starCount; j++) // 1セット分のスペース(o)を出力
{
printf(" ");
}
//printf("\n");
}
printf("\n");
}
//printf("\n");
}
return 0;
}
- bitter_fox
- 記事: 607
- 登録日時: 15年前
- 住所: 大阪府
-
keiji
Re: 課題についての質問です。
ありがとうございます。
末尾を消すのはなかなか難しそうです。
ご協力のおかげで、なんとか課題の1つをクリアできました。
自分の無知さゆえ、かなりの時間がかかってしまいましたが、
最後まで付き合っていただき、本当にありがとうございます。
機会があればまたアドバイスいただければ幸いです。
末尾を消すのはなかなか難しそうです。
ご協力のおかげで、なんとか課題の1つをクリアできました。
自分の無知さゆえ、かなりの時間がかかってしまいましたが、
最後まで付き合っていただき、本当にありがとうございます。
機会があればまたアドバイスいただければ幸いです。