當前位置:首頁 » 編程語言 » 魔方陣c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

魔方陣c語言

發布時間: 2022-01-26 01:20:21

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");
}
}

② 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 .

③ 魔方陣的C語言

代碼一:
#include <stdio.h>
#define N 16 //這里可以修改N的值,並且N只能為偶數
int main()
{
int a[N][N]={0},i,j,k,p,m,n;
p=1;
while(p==1)
{
printf(Enter n(1~%d): ,N-1);/*可以輸入小於等於N-1的奇數*/
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( );
}
}
代碼二:(相對於代碼一條理更清晰,更簡單、更容易理解)
將1~n的平方這幾個數構成一個n階魔方陣。
演算法:
依以下法則,你可以很快的寫出奇數階幻方!當然,這種寫法只是其中一個答案,而不是唯一答案。
1)將1填入第一行中間;
2)將每個數填在前一個數的右上方。
3)若該位置超出最上行,則改填在最下行的對應位置;
4)若該位置超出最右列,則該填在最左列的對應行位置;
5)若某元素填在第一行最右列,下一個數填在該數同列的下一行;
6)若某數已填好,但其右上角已填了其他數據,則下一個數填在該數同列的下一行位置。
#include<stdio.h>
void main()
{
int a[15][15]={0},i,j,m,n,temp,M;
printf(請輸入一個3~15的奇數: );
scanf(%d,&M);
i=0;
j=M/2;
a[i][j]=1;
for(temp=2;temp<=M*M;temp++)
{
m=i;
n=j;
i--;
j++;
if(i<0)
i=M-1;
if(j>M-1)
j=0;
if(a[i][j]!=0)
{
i=m+1,j=n;
a[i][j]=temp;
continue;
}
a[i][j]=temp;
}
printf(%d×%d魔方陣: ,M,M);
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf(%4d,a[i][j]);
printf( );
}
}
//(求4的倍數階幻方)
void main()
{
int i,j,x,y,n,t,k=1;
int a[100][100];
printf(請輸入魔方陣的階數n );
scanf(%d,&n);
printf(輸出為: );
if(n%4==0)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
a[i][j]=k;
k++;
}
x=n-1;
for(j=0;j<n/2;j++,x--)
{
for(i=0;i<n;i++)
if(i%4!=j%4&&(i+j)%4!=3)
{
t=a[i][j];
a[i][j]=a[i][x];
a[i][x]=t;
}
}
x=n-1;
for(i=0;i<n/2;i++,x--)
{
for(j=0;j<n;j++)
if(i%4!=j%4&&(i+j)%4!=3)
{
t=a[i][j];
a[i][j]=a[x][j];
a[x][j]=t;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf(%-4d,a[i][j]);
printf( );
}
}
else printf(輸入錯誤 );
system(pause...);
}

④ C語言編程,輸出魔方陣

程序代碼:

#include&lt;stdio.h&gt;

#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&lt;N)&&(n%2!=0))

p=0;

}

i=n+1;

j=n/2+1;

a[1][j]=1;

for(k=2;k&lt;=n*n;k++)

{

i=i-1;

j=j+1;

if((i&lt;1)&&(j&gt;n))

{

i=i+2;

j=j-1;

}

else

{

if(i&lt;1)i=n;

if(j&gt;n)j=1;

}

if(a&lt;i&gt;[j]==0)a&lt;i&gt;[j]=k;

else

{

i=i+2;

j=j-1;

a&lt;i&gt;[j]=k;

}

}

for(i=1;i&lt;=n;i++)

{

for(j=1;j&lt;=n;j++)

printf("%4d",a&lt;i&gt;[j]);

printf(" ");

}

return 0;

}

(4)魔方陣c語言擴展閱讀:

1.第一行中間一列的值為1。

所以用j=n/2+1確定1的列數,得出a[1][j]=1。

2.每一個數存放的行比前一個數的行數減1,列數加1。

行數用i=i-1確定,列數用j=j+1確定。

3.如果一個數行數為第一行,則下一個數行數為最後一行。

4.如果一個列行數為最後一列,則下一個數列數為第一列。

5.如果按上面的規則確定的位置上已有數,或上一個數是第一行最後一列,則把下一個數放在上一個數的下面。

⑤ c語言輸出魔方陣

先上圖:
A
BBB
CCCCC
DDDDDDD
CCCCC
BBB
A
再貼代碼:
#include "stdio.h"
#include "conio.h"

main()
{ int i,j;

for(i=1;i<=7;i++)
{
for(j=1;j<=(i<=4?5-i:i-3);j++)
{
printf(" ");
}
for(j=1;j<=2*(i<=4?i:8-i)-1;j++)
{
printf("%c",i<=4?i+64:7-i+65);
}
printf("\n");
}
getch();
}

在寫思路:
外層循環控制列印7行東西
里層循環用2個for,一個控制空格個數先遞減後遞增
一個控制字元從a變為d從d退回a
技巧:A的ascii編碼是65。所以我上面的加的數字你分析下就明白了。

樓主好運!
力求最簡短的代碼給你完成!

⑥ 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");
}
}

⑦ C語言 三階魔方陣

我只想說你的演算法錯了,你還是去查一查魔方陣的演算法吧;下面是n階奇數魔方陣的程序,你好好看看吧:

#include<stdio.h>

voidmain()

{

intarray[16][16];

inti,j,k,m,n;

/*變數初始化*/

m=1;

while(m==1)

{

printf("請輸入n(0<n<=15),n是奇數) ");

scanf("%d",&n);

/*判斷n是否是大於0小於等於15的奇數*/

if((n!=0)&&(n<=15)&&(n%2!=0))

{

printf("矩陣階數是%d ",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((i<1)&&(j>n))

{

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(" ");

}

}

輸入3所得到的三階魔方陣為:

⑧ 用c語言編寫n階魔方陣.謝謝了!!!

下面這個程序原本是從網路里找到的,不過發現網路裡面那個程序原來有誤,修改後終於可以了,給你,希望有幫助!!!

#include <stdio.h>
#define N 16 //N可修改

int main()
{
int a[N][N]={0},i,j,k,p,m,n;
p=1;
while(p==1)
{
printf("Enter n(1~%d): ",N-1);
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("\n");
}

return 0;
}

⑨ 輸出魔方陣C語言程序

下面運行通過,只不過不知道是否符合你的格式,代碼如下:

#include<stdio.h>

voidmain()

{

intnum=-1;

intq=0,t[5];

inta=0,b=0,c=0,d=0,e=0;

inti=0,j=0;

intcount=0,temp=0;

charp;

printf("*********************************************** ");

printf("(1、趙**2、錢**3、孫**4、李**5、周**) ");

while(num!=6)

{

printf("請輸入選號:");

scanf("%d",&num);

if(num==0)

q++;

else

switch(num)

{

case1:a++;break;

case2:b++;break;

case3:c++;break;

case4:d++;break;

case5:e++;break;

default:break;

}

}

count=a+b+c+d+e+q;

t[0]=a;

t[1]=b;

t[2]=c;

t[3]=d;

t[4]=e;

printf("hello ");

printf("趙有%d票 錢有%d票 孫有%d票 李有%d票 周有%d票 棄權有%d票 總共有%d人投票(包括棄權的) ",a,b,c,d,e,q,count);

for(i=0;i<5;i++)

for(j=0;j<5-i;j++)

if(t[j]<t[j+1])/*選票排序*/

{

temp=t[j];

t[j]=t[j+1];

t[j+1]=temp;

}

for(i=0;i<3;i++)/*輸出前三甲*/

{

if(t[i]==a)

printf("趙是第%d名,共%d票 ",i+1,a);

if(t[i]==b)

printf("錢是第%d名,共%d票 ",i+1,b);

if(t[i]==c)

printf("孫是第%d名,共%d票 ",i+1,c);

if(t[i]==d)

printf("李是第%d名,共%d票 ",i+1,d);

if(t[i]==e)

printf("周是第%d名,共%d票 ",i+1,e);

}

}

運行結果如圖:

⑩ n階魔方陣C語言

據我所知,起碼,n為偶數時n階魔方陣是很難得到的,你的是不是奇數的魔方陣?