先ほど質問してヒントをいただいて自分で少し考えたのですがうまくいきませんでした。今同じ数字を3つ以上並んだらその数を0にして0を上にもっていくという構文を作っています。つまり0を空きとして下に詰めていく感じです。例えば
61222
61211
66777
のように書いたら
01000
01000
06211
のように変えたいです。まず、横を見て同じ数字が3つ以上並んだ数字に-1をかけて次に縦を見て同じようにやり、最後に-の符号がついた数字を0にするというようにやりたいです。しかし、うまくいきません。それが下のコードです。
11122
22233
55555
のようにしたら
11100
22290
00000
のようになってしまいました。
縦と横を同時に0にするにはどうしたらよいのかと数字を入れ替えるのはどのようにすればよいのですか?回答よろしくお願いします。
※まだポインタは勉強していません
c
1#include <stdio.h> 2int main(void){ 3int i,j,k,c,d; 4printf("縦を指定してください(1~100)"); 5scanf("%d",&k) 6int puyo[100][5]; 7printf("数を入力してください"); 8for(i=0;i<k;i++){ 9 for(j=0;j<5;j++) 10 scanf("%d ,&puyo[i][j]"); 11 } 12} 13for(i=0;i<k;i++){ 14 for(j=0;j<5;j++){ 15 int len=1; 16 for(c=1;j+c<5;c++,len++){ 17 if(puyo[i][j]!=puyo[i][j+c]){ 18 puyo2[i][j]=puyo[i][j]; 19 break; 20 } 21 if(len>2){ 22 for(d=0;d<len;d++){ 23 puyo2[i][j+d]=-puyo[i][j+d]; 24 } 25 } 26 } 27 } 28 29for(j=0;j<5;j++){ 30 for(i=0;i<k;i++){ 31 int len=1; 32 for(c=1;i+c<k;c++,len++){ 33 if(puyo[i][j]!=puyo[i+c][j]){ 34 break; 35 } 36 if(len>2){ 37 for(d=1;d<=len;d++){ 38 puyo2[i][j+d]=-puyo[i][j+d]; 39 } 40 } 41 } 42 } 43 44for(i=0;i<k;i++){ 45 for(j=0;j<5;j++){ 46 if(puyo2[i][j]<0){ 47 puyo2[i][j]=0; 48 } 49 else{ 50 puyo2[i][j]=puyo2[i][j]; 51 } 52 } 53 } 54 } 55 56 for(i=0;i<k;i++){ 57 for(j=;j<5;j++){ 58 printf("%d",puyo2[i][j]); 59 } 60 printf("\n"); 61 } 62
回答3件
あなたの回答
tips
プレビュー