本文目錄一覽:
用C語言如何編程打印出由1到n^2的自然數構成的魔方陣,?
奇數魔方陣就是將數字排列在nxn(n為奇數)的方陣上,要求滿足各行、各列與各對角線的和相同。如下圖所示,是n=5的奇數魔方陣。
填魔方陣的方法以奇數魔方陣最為簡單,第一個數字放在第一行的正中央(填了1),然後向右(左)上填,如果右(左)上已有數字,則向下填,如下圖所示:
一般程序語言的陣列多由0開始,為了計算方便,我們利用索引1到n的部份,而在計算是向右(左)上或向下時,我們可以將索引值除以n值,如果得到餘數為1就向下,否則就往右(左)上。
4N 魔方陣
與奇數魔術方陣相同,在於求各行、各列與各對角線的和相等,不同的是這次方陣的維度是4的倍數。
先來看看4X4方陣的解法:
簡單的說,就是一個從左上由1依序開始填,但遇對角線不填,另一個由左上由16開始填,但只填在對角線,再將兩個合起來就是解答了。如果N大於等於2,則以 4X4為單位畫對角線,如下所示:
至於對角線的位置該如何判斷,有兩個公式,有興趣的可以畫圖印證,如下:
左上至右下:j % 4 == i % 4
右上至左下:(j % 4 + i % 4) == 1
8階魔方陣(N=2)的結果如下:
C語言做的魔方陣
下面是一個打印奇數階魔方陣的程序:
#includestdio.h
int main()
{int n=0,i,j,k=1,p,q,a[20][20]={0};
while(!(n%2))
{printf(“請輸入一個小於20的奇數:”);
scanf(“%d”,n);
}
i=0;
j=n/2;
for(p=0;pn;p++)
{for(q=0;qn;q++)
{if(q0)
{i=(i+n-1)%n;
j=(j+1)%n;
}
a[i][j]=k++;
}
i=(i+1)%n;
}
for(i=0;in;i++)
{for(j=0;jn;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
return 0;
}
C語言編程,輸出魔方陣
程序代碼:
#includelt;stdio.hgt;
#define N 16
int main()
{
int a[N][N]={0},i,j,k,p,n;
p=1;
while(p==1)
{
printf(“Enter n(1~%d):”,N);
scanf(“%d”,n);
if((n!=0)(nlt;N)(n%2!=0))
p=0;
}
i=n+1;
j=n/2+1;
a[1][j]=1;
for(k=2;klt;=n*n;k++)
{
i=i-1;
j=j+1;
if((ilt;1)(jgt;n))
{
i=i+2;
j=j-1;
}
else
{
if(ilt;1)i=n;
if(jgt;n)j=1;
}
if(alt;igt;[j]==0)alt;igt;[j]=k;
else
{
i=i+2;
j=j-1;
alt;igt;[j]=k;
}
}
for(i=1;ilt;=n;i++)
{
for(j=1;jlt;=n;j++)
printf(“%4d”,alt;igt;[j]);
printf(“\n”);
}
return 0;
}
擴展資料:
1.第一行中間一列的值為1。
所以用j=n/2+1確定1的列數,得出a[1][j]=1。
2.每一個數存放的行比前一個數的行數減1,列數加1。
行數用i=i-1確定,列數用j=j+1確定。
3.如果一個數行數為第一行,則下一個數行數為最後一行。
4.如果一個列行數為最後一列,則下一個數列數為第一列。
5.如果按上面的規則確定的位置上已有數,或上一個數是第一行最後一列,則把下一個數放在上一個數的下面。
c語言魔方陣
所謂的魔方距陣就是一種特殊的奇數階方陣:它的行,列,對角線,上的數字之和都要相等,且方陣中的每一個數字都不相等,且數字的範圍都在1到n*n之間.
我編的程序如下:
#includestdio.h
#define N 15
main()
{
int i,j,row,cloum,size,square[N][N],count;
clrscr();
printf(“please enter the square size(odd =15):\n”);
scanf(“%d”,size);
while(size%2==0||size15||size3)
{
printf(“error due to the wrng input!please input it again!\n”);
scanf(“%d”,size);
}
for(i=0;isize;i++)
for(j=0;jsize;j++)
square[i][j]=0;
i=0;j=(size-1)/2;
square[i][j]=1;
for(count=2;count=size*size;count++)
{
row=i-10?(size-1):(i-1);
cloum=j-10?(size-1):(j-1);
if(square[row][cloum])
i=(++i)%size;
else
{i=row;
j=j-10?(size-1):(j-1);
}
square[i][j]=count;
}
printf(“the %d square is:\n”,size);
for(i=0;isize;i++)
{
for(j=0;jsize;j++)
printf(“%d”,square[i][j]);
printf(“\n”);
}
}
只能求奇數的魔方陣
#define N 20
main()
{
int a[N][N];
int n,i,j,r;
scanf(“%d”,n);
for(i=0;iN;i++) for(j=0;jN;j++) a[i][j]=0;
i=0;
j=n/2;
a[i][j]=1;
for (r=2;r=n*n;r++)
if (a[(i+n-1)%n][(j+1)%n]==0)
{i=(i+n-1)%n;j=(j+1)%n;a[i][j]=r;}
else
{i=(i+1)%n;a[i][j]=r;}
for(i=0;in;i++)
{
for(j=0;jn;j++) printf(“%4d”,a[i][j]);
printf(“\n”);
}
}
求c語言輸出所有三階魔方陣的方法,
下面是n階奇數魔方陣的程序,輸入的數字是幾,就輸出幾階魔方陣:
# include stdio.h
void main(){
int array[16][16];
int i, j, k, m, n;
/* 變量初始化 */
m = 1;
while(m == 1)
{
printf(“請輸入n(0n=15),n是奇數)\n”);
scanf(“%d”, n);
/* 判斷n是否是大於0小於等於15的奇數 */
if((n!=0) (n=15) (n%2!=0))
{
printf(“矩陣階數是 %d\n”, n);
m = 0;
}
}
/* 數組賦初值為0 */
for(i=1; i=n; i++)
for(j=1; j=n; j++)
array[i][j] = 0;
/* 建立魔方陣 */j = n/2 + 1;
array[1][j] = 1;
for(k=2; k=n*n; k++)
{
i = i – 1;
j = j + 1;
if((i1) (jn))
{
i = i + 2;
j = j – 1;
}
else
{
if(i 1)
i = n;
if(j n)
j = 1;
}
if(array[i][j] == 0)
array[i][j] = k;
else
{
i = i + 2;
j = j – 1;
array[i][j] = k;
}
}
/* 輸出魔方陣 */for(i=1; i=n; i++)
{
for(j=1; j=n; j++)
printf(“%5d”, array[i][j]);
printf(“\n”);
}
}
原創文章,作者:CWER,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/149138.html