main文のみで1列奇数の枠の魔法陣を作ってみた

ryuka1211
記事: 0
登録日時: 7年前

main文のみで1列奇数の枠の魔法陣を作ってみた

投稿記事 by ryuka1211 » 7年前

何かもっと良く早くプログラムを読めそうなやつがありましたら、ご紹介お願いします。
¥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
*/

アバター
いわん
記事: 32
登録日時: 9年前

Re: main文のみで1列奇数の枠の魔法陣を作ってみた

投稿記事 by いわん » 7年前

表示するだけでよければx,y座標から計算してその位置に入る数字を求めることができます。

CODE:

// ヒンズーの連続方式で魔法陣を作成したとき、座標(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");
}