
3*3の魔法陣を
#include<stdio.h>
int main(void)
{
int mg[3][3],i=1,j,no=3,k;
j=(no+1)/2;
mg[1][j]=1;
for(k=2;k<=no*no;k++){
if(k%no==1)
i++;
else if(i==1){
i=no;
j++;
}
else if(j==no){
i--;
j=1;
}
else {
i--;
j++;
}
mg[i][j]=k;
}
for(i=1;i<=no;i++){
for(j=1;j<=no;j++)
printf("%3d",mg[i][j]);
printf("\n");
}
return(0);
}
と作ってみたのですが、
if文やelse文内のi++やi=などを、
すべてfor文を使って表したい場合、
どのように変更したらいいですか?
他の部分(if文やelse文以外)をいじってもいいので、
教えてください。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
ひょっとして、こういうこと?
#include <stdio.h>
#define SIZE 5 // Only odd number
int main(void)
{
int mg[SIZE][SIZE];
int num, i, j;
for(num = 1, i = 0, j = SIZE / 2; num <= SIZE * SIZE;
(num % SIZE == 1) ? (i = (i + 1) % SIZE) : ((i = (i + 2) % SIZE), (j = (j + 1) % SIZE))){
mg[i][j] = num ++;
}
for(i = 0; i < SIZE; i ++){
for(j = 0; j < SIZE; j ++) printf("%3d", mg[i][j]);
printf("\n");
}
return 0;
}

No.2
- 回答日時:
[1] いじるも何も、配列長を超えるために
そもそも動くプログラムではない。
[2] あなたが今したいことと、このプログラムの
(既存の)ロジックは全く異なる。
確認。このプログラムは本当にあなたが作ったのですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
getcの改行判定
-
for文の中にswitch文はいれられ...
-
配列を関数に渡す方法
-
C言語 数字以外を入力させない...
-
while文を使った問題なのですが...
-
for文について
-
最早開始時間と最遅完了時刻を...
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
値差の%計算方法について
-
数字以外が入力されたらエラー...
-
「Aに対するBの割合」と「Aに対...
-
VB6.0での小数点の扱いについて
-
【C++】関数ポインタの使い方
-
c languageで 簡単な質問があ...
-
ある商品のロス率を5%見込み、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#if 1 #elseの意味について
-
構文エラー";"が型の前にあり...
-
for文の中にswitch文はいれられ...
-
配列を使って魔方陣
-
C言語 数字以外を入力させない...
-
10進数からN進数に変換するプロ...
-
配列を関数に渡す方法
-
scanfが実行されません
-
C言語で電卓を作成する。
-
C言語・最大値を算出するプロ...
-
C言語階乗の総和を求める
-
実行すると if文 に矛盾
-
計算結果がlong型以上になる場...
-
C言語プログラム
-
C言語。どうしてコンパイルでき...
-
c言語for文
-
getcの改行判定
-
C言語で勉強中(max,min)の出し方
-
C言語 プログラム
-
SIGALRMでプロセス終了
おすすめ情報