重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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件)

 


 訂正
i = (i + 2) % SIZE -> i = (i + SIZE - 1) % SIZE
 
    • good
    • 0

 


 ひょっとして、こういうこと?

#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;
}
 
    • good
    • 0

[1] いじるも何も、配列長を超えるために


  そもそも動くプログラムではない。

[2] あなたが今したいことと、このプログラムの
  (既存の)ロジックは全く異なる。


確認。このプログラムは本当にあなたが作ったのですか?
    • good
    • 0

 


 とりあえず、
"int mg[3][3]"は、mg[0][0]~mg[2][2]です。
 
    • good
    • 0

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