今同じ数字を3つ以上並んだらその数を0にして0を上にもっていくという構文を作っています。つまり0を空きとして下に詰めていく感じです。例えば
61222
61211
66777
のように書いたら
01000 01000 06211
のように変えたいです。横のコードは縦横の入れ替えを除いて書けました。
それが下のコードです。縦と横を同時に0にするにはどうしたらよいのかと数字を入れ替えるのはどのようにすればよいのですか?回答よろしくお願いします。
※まだポインタは勉強していません
C
1#include <stdio.h> 2int main(void){ 3int i,j,k,c; 4printf("縦を指定してください"); 5int puyo[k][5]; 6printf("数を入力してください"); 7for(i=0;i<k;i++){ 8 for(j=0;j<5;j++) 9 scanf("%d ,&puyo[i][j]"); 10 } 11} 12for(i=0;i<k;i++){ 13 for(j=0;j<5;j++){ 14 int len=1; 15 for(c=1;j+c<5;c++,len++){ 16 if(puyo[i][j]!=puyo[i][j+c]){ 17 break; 18 } 19 if(len>2){ 20 for(c=0;c<len;c++){ 21 puyo[i][j+c]=0; 22 } 23 } 24 } 25 } 26 27 for(i=0;i<k;i++){ 28 for(j=;j<5;j++){ 29 printf("%d",puyo[i][j]); 30 } 31 printf("\n"); 32 } 33 34} 35
"int puyo[k][5];'・・・Cでは、配列のサイズに変数は使用できません。動的にメモリを確保するか大きめの配列を作りましょう。
01000
01000
06211
↑これ間違えていません?
61222,61277,66222の場合、61000,61077,66000になるということですか?もしそうなら、元の値をどこかに記憶しておく必要がありますね。
同じ数字が3つ以上並んだら0にするということです。61222,12222,66166の場合、61000,10000,66166になるということです。言葉足らずですみません。また、UNIXだと一応動くのですがどこをどのように直せばよいのでしょうか?
えっと、コンパイルできないですよ。
t.c:13:1: error: expected identifier or '('
for (i = 0; i < k; i++) {
main()が、このfor文の前で終わっていますd^^;
scanfもおかしい(^_^;)
そもそも、intに読み込む必要有るんですかねえ? 文字列のほうが簡単なような^^;
では自分で数字を打ち込んでやる場合はどうしたらよいのでしょうか?全く分からなくなってしまいました(泣)。ご指導よろしくお願いします。
文字列でできるのですか?
数字が3個並んだら’0’にするんですよね?
文字列は、fgets()←桁指定もできる。
0を上に持っていく、というのは上の数値と入れ替えるって意味ですか?
そうです。
まだポインタは勉強していないのでそれ以外の方法で指摘していただけるとありがたいです。
61211と66777、01000と06211を見ると777を0にして、前行の211と入れ変えているように見えますが違いますか?
察するに落ち物パズル的な動きではないかと
おっしゃる通りです。まず、同じ数字が3つ以上並んだらその数を0にしてそのあとに上下を入れ替えるという操作をしたいです。その結果が指摘していただいた結果です。
まさにその通りです。ですがやり方がわからず困っています。
たぶん落ち物パズルゲームのようなものを作っているんだと思いますが、その仕様を聞かないと回答できないような・・・特に縦に3つ以上ならんだ場合に、その上の数値をどうするかが読み取れません。重力で一気に地面までぷよが落ちるタイプなのか、あくまで1ますのみ落ちてくるタイプなのか・・・
一気に落ちるタイプであれば、消す処理と重力処理は別々に書けばいいですし。
地面まで一気に落ちる感じです。言葉足らずですみません。
地面まで一気に落ちる感じです。言葉足らずですみません。
ああ、テトリス系の落ち物パズル的な動きをさせるのですか。それなら、各数字を1文字ずつ分解して5x3の2次元配列に入れたほうが処理がしやすいと思いますが。
回答3件
あなたの回答
tips
プレビュー