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

用c語言編寫魔方陣視頻

發布時間: 2022-08-10 09:56:54

c語言:輸出魔方陣

魔方陣,古代又稱「縱橫圖」,是指組成元素為自然數1、2…n的平方的n×n的方陣,其中每個元素值都不相等,且每行、每列以及主、副對角線上各n個元素之和都相等。
如3×3的魔方陣:
8 1 6
3 5 7
4 9 2
魔方陣的排列規律如下:
(1)將1放在第一行中間一列;
(2)從2開始直到n×n止各數依次按下列規則存放;每一個數存放的行比前一個數的行數減1,列數加1(例如上面的三階魔方陣,5在4的上一行後一列);
(3)如果上一個數的行數為1,則下一個數的行數為n(指最下一行);例如1在第一行,則2應放在最下一行,列數同樣加1;
(4)當上一個數的列數為n時,下一個數的列數應為1,行數減去1。例如2在第3行最後一列,則3應放在第二行第一列;
(5)如果按上面規則確定的位置上已有數,或上一個數是第一行第n列時,則把下一個數放在上一個數的下面。例如按上面的規定,4應該放在第1行第2列,但該位置已經被占據,所以4就放在3的下面;

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

Ⅲ 請編程達人用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;
}

Ⅳ 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語言 魔方陣

一個求奇數階魔方陣的程序,步驟如下:
(1)將1放在第一行中間一列;
(2)從2開始直到n×n止各數依次按下列規則存放;每一個數存放的行比前一個數的行數減1,列數加1(例如上面的三階魔方陣,5在4的上一行後一列);
(3)如果上一個數的行數為1,則下一個數的行數為n(指最下一行);例如1在第一行,則2應放在最下一行,列數同樣加1;
(4)當上一個數的列數為n時,下一個數的列數應為1,行數減去1。例如2在第3行最後一列,則3應放在第二行第一列;
(5)如果按上面規則確定的位置上已有數,或上一個數是第一行第n列時,則把下一個數放在上一個數的下面。例如按上面的規定,4應該放在第1行第2列,但該位置已經被占據,所以4就放在3的下面;

Ⅵ 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;

}

(6)用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語言編寫

/*N階魔方陣*/
//#include
#include
#define N 99 //最大階數,根據需求而改變此值。試了一下階數為1023和1024,大約要一分鍾才能顯示完畢.

int a[N][N];//定義全局數組
void mfz1(int);
void mfz2(int n);
void main()
{
int n;
cout<<"Please Input the Order of the Magic Matrix:"< cin>>n;
if (n%2!=0) mfz1(n);
if (n%4==0) mfz2(n);//寫出了階數為4的倍數的函數,主函數做修改
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout< }

}

void mfz1(int n) //產生奇數階魔方矩陣
{
int i,j,i0,j0,x;//定義數組下標
int flag[N][N];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
flag[i][j]=0;
i=1;
j=n/2+1;
a[i][j]=1;
flag[i][j]=1;
for(x=2;x<=n*n;x++)
{
i0=i;
j0=j;
i=(--i)>0?i:n;
j=(++j)>n?1:j;

if(!flag[i][j])
{
a[i][j]=x;
flag[i][j]=1;
}
else
{
a[i0+1][j0]=x;
flag[i0+1][j0]=1;
i=i0+1;
j=j0;
}

}

}

void mfz2(int n) //產生能被4整除的偶數階魔方陣
{int i,j;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if ((i<=n/2 && j<=n/2 && (i+j)%2)||(i>n/2 && j>n/2 && (i+j)%2)
||(i<=n/2 && j>n/2 && !((i+j)%2))||(i>n/2 && j<=n/2 && !((i+j)%2)))
a[i][j]=n*n+1;
else a[i][j]=0;
int sum=1;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
{if (a[i][j]) a[i][j]=a[i][j]-sum;
else a[i][j]=sum;
sum++;}
}
其中奇數階部分由本人編寫,特此聲明。
不足之處:偶數階還差一種情況,本人正在考慮中...
編譯環境:VC++6.0 , 如果要在TC下編譯請:
(1)將輸入輸出語句cout/cin改成相應的printf/scanf即可(不過還要自己加上I/O格式哦!)
(2)將變數定義都置於函數體的開頭部分。

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

Ⅸ 用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語言做的魔方陣

我奇怪你的語法怎麼可能沒錯,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");
}
}