何かもっと良く早くプログラムを読めそうなやつがありましたら、ご紹介お願いします。
¥nが\nになってますが、そこはスルーをお願いします。
#include
/////(作成する魔法陣の1列の枠決め)//////
int main(void){
int n=0,a;
while(n%2==0 || n>10){
printf("奇数の魔法陣を作成します。\n");
printf("作成する魔法陣の一列の枠の数を記入してください(1桁のみ可)⇒");
scanf("%d",&n);
if(n%2==0 || n>10){
printf("\n");
printf(">>\n\n");
}
}
//////(それぞれの数字の座標決め)///////
int b,x,y,count[10][10],count_c; /* ※int n=&n,a; */
b=n*n+1;
x=n/2+1;
y=n; //x,yは座標
count_c=1; //入れる数字
count[x][y]=count_c; //座標に入る数字
while(count_c=1;y--){
for(x=1;x<=n;x++){
printf("%3d",count[x][y]);
}
printf("\n");
}
return 0;
}
/////////////////////////////////////////////////////////////////////////////
/*
奇数の魔法陣を作成します。
作成する魔法陣の一列の枠の数を記入してください(1桁のみ可)⇒3
8 1 6
3 5 7
4 9 2
奇数の魔法陣を作成します。
作成する魔法陣の一列の枠の数を記入してください(1桁のみ可)⇒5
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
*/
main文のみで1列奇数の枠の魔法陣を作ってみた
Re: main文のみで1列奇数の枠の魔法陣を作ってみた
表示するだけでよければx,y座標から計算してその位置に入る数字を求めることができます。
// ヒンズーの連続方式で魔法陣を作成したとき、座標(x,y)の数字をnで割った商と余りは以下の式で求められる
// ただし、0~n-1の数字で魔法陣を作成するものとする
// 商 = (x + y + n/2 + 1) % n
// 余り = (2 * x + y + 1) % n
for (int y = 0; y < n; ++y)
{
for (int x = 0; x < n; ++x)
{
int syo = (x + y + n / 2 + 1) % n;
int amari = (2 * x + y + 1) % n;
// 0~n-1で計算しているので表示するときは+1する
printf("%3d", syo * n + amari + 1);
}
printf("\n");
}