Ⅰ 如何用C編寫一個解魔方的程序求高手來!
估計這種智能化的沒有幾個人可以編寫出來。這可是一個非常大的工程。
不過我可以告訴你編寫的步驟:
1.先拼好一個面的十字架,注意與臨面的一致性,然後拼好一個面。
2.再拼好這個面的四個臨面,用的方法是:五逆四順或者五順四逆。
3.再拼最後一個面的十字架,方法為:三逆三順。
4.拼好最後一個面為同色,方法:左下右上。
5.最後是完全拼好,口訣為:逆,逆,順,逆,逆;順順,順,順,順;順 順,逆,順,順;順順,逆,逆。
Ⅱ 用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
Ⅳ 怎樣用C語言編寫魔方程序
說白了就是遞歸。你可以去看漢諾塔和華容道的遞歸方式。這兩個我寫過,其實魔方的差不多,就是在三維結構體組的銜接上需要沸點腦子。說錯了是結構體的構造上需要琢磨下
Ⅳ 能不能用C語言編寫一個魔方程序謝謝
這個很難,演算法很復雜,
最關鍵的是,
1. 輸入太多了,幾乎需要將6個面的每一格的顏色都輸入,否則魔方的狀態不唯一
2. 編程的人需要有玩魔方的基礎,唉,反正我不會玩魔方~~~
Ⅵ 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語言編程,輸出魔方陣
程序代碼:
#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;
}
(7)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語言程序編寫的1到n的平方的魔方陣運行的結果是什麼
#include"stdio.h"
main()
{
inta[20][20],i,j,k,p=1,m,n;
while(p==1)
{
printf("Entern(n=1--19):");
scanf("%d",&n);
if(n>0&&n<=19&&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-=1;
j+=1;
if(i<1&&j>n)
{
i+=2;
j-=1;
}
else
{
if(i<1)i=n;
if(j>n)j=1;
}
if(a[i][j]==0)a[i][j]=k;
else
{
i+=2;
j-=1;
a[i][j]=k;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)printf("%4d",a[i][j]);
printf(" ");
}
}
我舉個例子:3介魔方陣
8 1 6
3 5 7
4 9 2
就是每一行,每一列和對角線這和都相等
Ⅸ 求解!!!如何在C語言中編寫一個魔方矩陣
#include <stdio.h>
int main()
{ int a[15][15],i,j,k,p,n;
p=1;
while(p==1)
{printf("enter n(n=1--15):");
scanf("%d",&n);
if ((n!=0) && (n<=15) && (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("%5d",a[i][j]);
printf("\n");
}
return 0;
}
Ⅹ 請編程達人用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;
}