1. 用c語言輸出「魔方陣」
這個是17以內奇數階和四階的!!!
#include<stdio.h>
void main()
{
int x,i,j,fl,k=0,a[18][18]={0};
printf("請輸入層數:");
scanf("%d",&x);
if((x!=4)&&(x%2==0)||(x<0)&&(x>18))
fl=0;
else if(x==4)
{
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
{
k+=1;
a[i][j]=k;
}
}
for(i=0;i<x;i++)
for(j=0;j<x;j++)
{
if(((i==j)&&(i<2))||((j==x-i-1)&&(j>2)))
{
k=a[i][j];a[i][j]=a[x-i-1][x-j-1];a[x-i-1][x-j-1]=k;
}
}
}
else
{
i=0;
j=x/2;
a[0][j]=1;
for(k=2;k<=x*x;k++)
{
i=i-1;
j=j+1;
if(i<0&&j>x-1)
{
i=i+1;
j=j-1;
}
else
{
if(i<0)i=x-1;
if(j>x-1)j=0;
}
if(a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
}
if(fl==0)
printf("無此魔方陣!\n");
else
{
for(i=0;i<x;i++)
{
for(j=0;j<x;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
}
2. C語言編程,輸出魔方陣
程序代碼:
#include<stdio.h>
#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)&&(n<N)&&(n%2!=0))
p=0;
}
i=n+1;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if(i<1)i=n;
if(j>n)j=1;
}
if(a<i>[j]==0)a<i>[j]=k;
else
{
i=i+2;
j=j-1;
a<i>[j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%4d",a<i>[j]);
printf(" ");
}
return 0;
}
(2)用c語言編寫魔方陣程序擴展閱讀:
1.第一行中間一列的值為1。
所以用j=n/2+1確定1的列數,得出a[1][j]=1。
2.每一個數存放的行比前一個數的行數減1,列數加1。
行數用i=i-1確定,列數用j=j+1確定。
3.如果一個數行數為第一行,則下一個數行數為最後一行。
4.如果一個列行數為最後一列,則下一個數列數為第一列。
5.如果按上面的規則確定的位置上已有數,或上一個數是第一行最後一列,則把下一個數放在上一個數的下面。
3. c語言輸出魔方陣程序解釋
首先魔方陣是一個奇數行列式方陣,它的一行,一列,對角線的和都相等。
建立魔方陣的第一步是確定1的位置,它是第一行的中間列,之後要確定其他位置的值,
問題1:if((i<1)&&(j>n))時,說明你確定的位置已經超出了魔方陣,所以要用i=i+2;j=j-1;把它拉回的魔方陣內,
問題2:判斷第i行地j列的值是否等於0(即是否被填充),如果沒填充,就填k,如果填充,再尋找下一個位置,
問題3:因為你的主函數main()前面的返回值為int,所以要提供返回值,那不是return=0,而是return
0;就是返回0,也可以返回1,這沒關系的,如果不想要也行,那得把main()前面的int
改為void
.
4. 用C語言,輸出「魔方陣」
#include<stdio.h>
void main()
{
int a[16][16],i,j,k,n;
printf("enter n(n=1 to 15):");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0; //一定要初始化數組,不然就輸不出結果
if(j=n/2+1)
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1; //先寫出一般規律
j=j+1;
if((i<1)&&(j>n)) //第一行最後一個元素,其下一個元素直接放在它的下面
{
i=i+2;
j=j-1;
}
else
{
if(i<1) //到了第一行,則其下一個元素在第n行
i=n;
if(j>n) //到了最後一列,則下一個元素轉到第一列
j=1;
}
if(a[i][j]==0) //如果下一個元素還沒有被填充,已定的規律由大到小的順序進行輸出
a[i][j]=k;
else
{
i=i+2; //由於原來i減去了1,所以現在要加上1,總共要回去2
j=j-1; //由於原來j加上了1,所以現在要減去1
a[i][j]=k;
}
}
for(i=1;i<=n;i++) //矩陣的輸入模塊
{
for(j=1;j<=n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
5. c語言中魔方陣編程的思路
/*
所謂魔方陣是指這樣的的方陣:
它的每一行、每一列和對角線之和均相等。
輸入n,要求列印由自然數1到n2的自然數構成的魔方陣(n為奇數)。
例如,當n=3時,魔方陣為:
8 1 6
3 5 7
4 9 2
魔方陣中各數排列規律為:
① 將「1」放在第一行的中間一列;
② 從「2」開始直到n×n為止的各數依次按下列規則存放:每一個數存放的行比前一個數的行數減1,列數同樣加1;
③ 如果上一數的行數為1,則下一個數的行數為n(最下一行),如在3×3 方陣中,1在第1行,則2應放在第3行第3列。
④ 當上一個數的列數為n時,下一個數的列數應為1,行數減1。如2在第3行第3列,3應在第2行第1列。
⑤如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時,則把下一個數放在上一個數的下面。
如按上面的規定,4應放在第1行第2列,但該位置已被1占據,所以4就放在3的下面。由於6是第1行第3列(即最後一列),故7放在6下面。
*/
#include"stdio.h"
void main()
{
int i,n=5;
printf("---------------列印魔方陣-------------\n\n");
int a[5][5];
for( i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=0;//初始化
i=0;
int j=n/2;
int t=1;
int si=0;
int sj=0;//記錄上一個數的位置
while(t<=n*n)
{
//printf("\n%4d\n\n",t);
if(a[i][j]==0)
a[i][j]=t;
else
{
if(si==0 && sj==n-1)
{
a[si+1][sj]=t;
i=si+1;
j=sj;
}
if(si!=n-1)
{
a[si+1][sj]=t;
i=si+1;
j=sj;
}
if(si==n-1)
{
a[0][sj]=t;
i=0;
j=sj;
}
}
si=i;
sj=j;
/*計算下一個元素的位置*/
if(i==0)
i=n-1;
else
i=i-1;
if(j==n-1)
j=0;
else
j=j+1;
t=t+1;
}
for(i=0;i<n;i++)
{
for(int j=0;j<n;j++)
printf("%4d",a[i][j]);
printf("\n\n");
}
}
6. 請編程達人用c語言編寫一個程序輸出魔方陣
#include
<stdio.h>
#define
N
16
//這里可以修改N的值
int
main()
{
int
a[N][N],i,j,k,p,m,n;
p=1;
while(p==1)
/*要求階數為1~15的商數*/
{
printf("Enter
n(n=1~15):");
//可以輸入小於等於N-1的整數
scanf("%d",&n);
if((n!=0)&&(n<=N-1)&&(n%2!=0))
p=0;
}
for(i=1;i<=n;i++)
/*初始化*/
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
/*建立魔方陣*/
a[1][j]=1;
for(k=2;k<=n*n;k++)
{
i=i-1;
j=j+1;
if((i<1)&&(j>n))
{
i=i+2;
j=j-1;
}
else
{
if(i<1)
i=n;
if(j>n)
j=1;
}
if(a[i][j]==0)
a[i][j]=k;
else
{
i=i+2;
j=j-1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
/*輸出魔方陣*/
{
for(j=1;j<=n;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return
0;
}
7. c語言魔方陣
所謂的魔方距陣就是一種特殊的奇數階方陣:它的行,列,對角線,上的數字之和都要相等,且方陣中的每一個數字都不相等,且數字的范圍都在1到n*n之間.
我編的程序如下:
#include<stdio.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||size>15||size<3)
{
printf("error e to the wrng input!please input it again!\n");
scanf("%d",&size);
}
for(i=0;i<size;i++)
for(j=0;j<size;j++)
square[i][j]=0;
i=0;j=(size-1)/2;
square[i][j]=1;
for(count=2;count<=size*size;count++)
{
row=i-1<0?(size-1):(i-1);
cloum=j-1<0?(size-1):(j-1);
if(square[row][cloum])
i=(++i)%size;
else
{i=row;
j=j-1<0?(size-1):(j-1);
}
square[i][j]=count;
}
printf("the %d square is:\n",size);
for(i=0;i<size;i++)
{
for(j=0;j<size;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;i<N;i++) for(j=0;j<N;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;i<n;i++)
{
for(j=0;j<n;j++) printf("%4d",a[i][j]);
printf("\n");
}
}
8. C語言編寫的魔方陣 重要步驟的解釋
其實這個只能實現奇數階的魔方陣輸出
奇數階的魔方陣有如下規律,根據這個規律編程就是LZ所寫的代碼了,LZ根據規律來看代碼就應該可以清楚了
演算法:
魔方陣的排列規律(奇數陣):
⑴將1放在第一行中間一列。
⑵從2開始直到n×n止各數依次按下列規則存放:每一個數存放的行比前一個數的行數減1,列數加1。
⑶如果上一個數的行數為1,則下一個數的行數為n,列數加1。如果上一個數的列數的n時,下一個數的列數為1,行數減1。
⑷如果按上面的規則確定的位置上已有數,或上一個數是第一行第n列時,則把下一個數放在上一個數的下面。
9. 用C語言如何編程列印出由1到n^2的自然數構成的魔方陣,
奇數魔方陣就是將數字排列在nxn(n為奇數)的方陣上,要求滿足各行、各列與各對角線的和相同。如下圖所示,是n=5的奇數魔方陣。
一般程序語言的陣列多由0開始,為了計算方便,我們利用索引1到n的部份,而在計算是向右(左)上或向下時,我們可以將索引值除以n值,如果得到余數為1就向下,否則就往右(左)上。
10. C語言做的魔方陣
我奇怪你的語法怎麼可能沒錯,int str[n][n];肯定是編譯不通的,數組定義時長度必須是常量。給你一個我自己寫的魔方陣演算法吧,算作參考
#include<stdio.h>
#define N 100
void sort(int *p,int num)
{
int i;
int row,col;
row=0;
i=0;
col=num/2;
while(i<num*num)
{
if(*(p+row*num+col)!=0)
{row+=2;col--;}
*(p+row*num+col)=i+1;
if((row==0)&&(col==num-1))
{
row++;
}
else
{
if(row==0)
row=num-1;
else
row--;
if(col==num-1)
col=0;
else
col++;
}
i++;
}
}
void main()
{
int i,flag,a[N]={0};
int *p,n;
flag=1;
p=a;
while(flag==1)
{
printf("enter n(1~10)\n");
scanf("%d",&n);
if((n>0)&&(n<11)&&(n%2!=0)) flag=0;
}
sort(p,n);
for(i=0;i<n*n;i++)
{
printf("%5d",a[i]);
if((i+1)%n==0) printf("\n");
}
}