本文目錄一覽:
- 1、c語言幻方
- 2、c語言題目,輸入一個N*N的矩陣,判斷該矩陣是否為幻方矩陣,跪求,跪求,腦已殘
- 3、怎樣用C語言編寫幻方
- 4、求幻方的C語言演算法!
- 5、C語言編程幻方輸入問題
- 6、用C語言編一個簡單的程序來判斷N×N的矩陣是否為一個幻方。
c語言幻方
1.每個自然數只出現一次,沒有考慮
2.數組下標從0開始
3.
for(i=1;i=n;i++)
{
for(j=1;j=n;j++)
{
if(j==i) s1=s1+a[i][j];
if(i+j==n+1) s2=s2+a[i][j];
}
}
這樣沒必要
for(i=0;in;i++)
{
s1+=a[i][i];
s2+=a[i][n-1-i];
}
c語言題目,輸入一個N*N的矩陣,判斷該矩陣是否為幻方矩陣,跪求,跪求,腦已殘
#include stdio.h
#include stdlib.h
int main()
{
int n,i,k,p;
long sn0,sn1,sn2,sn3,sn4;
printf(“Input n:”);
scanf(“%d”,n);
int m[n][n];
for(i=0;in;++i){
for(k=0;kn;++k){
printf(“Input M[%d,%d]:”,i,k);
scanf(“%d”,m[i][k]);
}
}
sn0=0;sn1=0;sn2=0;sn3=0;sn4=0;
for(i=0;in;++i){
sn0+=m[0][i];
}
p=1;
printf(“%ld\n”,sn0);
for(i=0;in;++i){
sn1=0;
sn2=0;
for(k=0;kn;++k){
sn1+=m[i][k];
sn2+=m[k][i];
}
if(sn1!=sn0 || sn2!=sn0){
p=0;
break;
}
sn3+=m[i][i];
sn4+=m[i][n-i-1];
}
if(sn3 != sn0 || sn4!=sn0)
p=0;
if(p==1){
printf(“Yes!\n”);
}else{
printf(“No!\n”);
}
return 0;
}
怎樣用C語言編寫幻方
你的這個問題實際上包括兩個問題:
1、幻方的演算法
2、怎樣用C語言實現幻方的演算法
這兩個問題是大不同的。
關於幻方的演算法,或者叫幻方填法,目前有很多種,拉丁正交、馬步法等等,針對奇數或者偶數(又分單偶數和雙偶數)等有不同的演算法,但這些演算法只是幫你找到幻方的一個或多個實例(不會是全部),而同階數的幻方到底有多少個,那只有用窮舉法了,比如4階幻方,基本4階幻方共7040個,剔除旋轉翻轉的,即具有獨立結構的共880個;4階完美幻方共84個,具有獨立結構的共48個。
對於高階幻方(比如超過8階),窮舉法實際上是不可行的,因為它的窮舉時間將是天文數字(以目前主流PC),所以不要試圖用計算機窮舉高階幻方的全部結果,那將是徒勞的。
如果你只是需要1個實例,那麼推薦你使用MATLAB語言工具,因為它提供了幻方函數magic(n),不需要編程,直接從命令窗口輸入就可以得到答案。
至於第二個問題,當然你首先會C語言,剩下的就是編程技巧問題了,而這個問題是無從回答的。相信你問的是第一個問題。
以上的回答雖然沒有明確給出答案,但相信對你會有幫助。
求幻方的C語言演算法!
你先看看吧:
3階幻方:
8 1 6
3 5 7
4 9 2
5階幻方:
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
#include stdio.h
#define N 5
void main()
{
int i,j,k,a[N][N];
for(i=0;iN;i++)
for(j=0;jN;j++)
a[i][j]=0; /*初始值為零*/
j=N/2;
a[0][j]=1; /*確定1的位置*/
for(k=2;k=N*N;k++)
{
i–;
j++;
if(i0)
i=N-1; /*行出界*/
else if(jN-1)
j=0; /*列出界*/
if(a[i][j]==0)
a[i][j]=k; /*按規律順序確定數值位置*/
else
{
i=(i+2)%N;
j=(j-1+N)%N;
a[i][j]=k; /*已有數字時數字的位置*/
}
}
printf(“\n\n”);
for(i=0;iN;i++)
{
printf(“\t”);
for(j=0;jN;j++)
printf(“%4d”,a[i][j]); /*顯示幻方陣*/
printf(“\n\n”);
}
return;
}
最好是自己研究下 ,印象比較深刻。
好好學習呀 其實我也只是個初學者
C語言編程幻方輸入問題
#include stdio.h
#define N 3
int fun(int (*a)[N])
{ int i,j,m1,m2,row,colum;
m1=m2=0;
%判斷對角線的和不否相等 不相等返回0
for(i=0; iN; i++)
{ j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; }
if(m1!=m2) return 0;
for(i=0; iN; i++) {
/**********found**********/
row=colum=0;
%判斷行row 列colum的和 是否相等 不相等返回0
for(j=0; jN; j++)
{ row+=a[i][j]; colum+=a[j][i]; }
/**********found**********/
if( (row!=colum) || (row!=m1) ) return 0;
}
/**********found**********/
%判斷完畢是幻方返回1
return 1;
}
main()
{ int x[N][N],i,j;
%輸入矩陣x
printf(“Enter number for array:\n”);
for(i=0; iN; i++)
for(j=0; jN; j++) scanf(“%d”,x[i][j]);
printf(“Array:\n”);
%輸出矩陣
for(i=0; iN; i++)
{ for(j=0; jN; j++) printf(“%3d”,x[i][j]);
printf(“\n”);
}
%根據fun的值輸出結果
if(fun(x)) printf(“The Array is a magic square.\n”);
else printf(“The Array isn’t a magic square.\n”);
}
你要是符合C規則的矩陣輸入方法否可以啊??? 你看輸出矩陣那塊 輸出的矩陣跟你輸入的是不是一樣啊 要是一樣 結果都是對的 一般的就是 列之間用空格 行之間用回車 這段程序的重點是為什麼把 判斷對角線寫在前面吧????要是順序反了 判斷是不全面的
用C語言編一個簡單的程序來判斷N×N的矩陣是否為一個幻方。
#include”stdio.h”
#include”math.h”
int a[256][256];
int sum;
int check();
void ins(int n);
void main(){
int i,j,n,k,t,p,x;
scanf(“%d”,n);
sum=(n*n+1)*n/2;
if(n%2==1) //奇數幻方
ins(n);
if(n%4==2) { //單偶數幻方
k=n/2;
ins(k);
for(i=0; ik; i++)
for(j=0; jk; j++){
a[i][j+k]=a[i][j]+2*k*k;
a[i+k][j]=a[i][j]+3*k*k;
a[i+k][j+k]=a[i][j]+k*k;
}
t=(n-2)/4;
for(i=0; ik; i++)
for(j=0; jk; j++){
if((jt)(it)){
p=a[i][j];
a[i][j]=a[i+k][j];
a[i+k][j]=p;
}if((jt)(ik-t-1)){
p=a[i][j];
a[i][j]=a[i+k][j];
a[i+k][j]=p;
}if((i=ti=k-t-1)(j=tjt*2)){
p=a[i][j];
a[i][j]=a[i+k][j];
a[i+k][j]=p;
}if(j1j=t){
p=a[i][j+k];
a[i][j+k]=a[i+k][j+k];
a[i+k][j+k]=p;
}
}
}
if(n%4==0) { //雙偶數幻方
x=1;
for(i=0; in; i++)
for(j=0; jn; j++)
a[i][j]=x++;
for(i=0; in; i++)
for(j=0; jn; j++){
if(i%4==0abs(i-j)%4==0)
for(k=0; k4; k++)
a[i+k][j+k]=n*n-a[i+k][j+k]+1;
else if(i%4==3(i+j)%4==3)
for(k=0; k4; k++)
a[i-k][j+k]=n*n-a[i-k][j+k]+1;
}
}
if(check(n)==1){
for(i=0; in; i++){
for(j=0; jn; j++)
printf(“%5d”,a[i][j]);
printf(“\n”);
}
}
}
int check(int n) { //檢驗是否是幻方
int i,j,sum1=0,sum2;
for(i=0; in; i++){
for(j=0; jn; j++)
sum1+=a[i][j];
if(sum1!=sum)
return 0;
sum1=0;
}
for(i=0; in; i++){
for(j=0; jn; j++)
sum1+=a[i][j];
if(sum1!=sum)
return 0;
sum1=0;
}
for(sum1=0,sum2=0,i=0,j=0; in; i++,j++){
sum1+=a[i][j];
sum2+=a[i][n-j-1];
}
if(sum1!=sum)
return 0;
if(sum2!=sum)
return 0;
else
return 1;
}
void ins(int n) { //單偶數幻方的輸入
int x,y,m;
x=0;
y=n/2;
for(m=1; m=n*n; m++){
a[x][y]=m;
if(m%n!=0){
x–;
y++;
if(x0)x=x+n;
if(y==n)y=n-y;
}else{
x++;
if(x==n)x=x-n;
}
}
}
// c++語言實現
//(1)求奇數幻方
#includeiostream.h
#includeiomanip.h
int main(){
int n,x,y,tot=0,i,j,a[100][100]={0};
cout”請輸入一個奇數”endl;
cinn;
a[i=n/2][j=0]=++tot;
i–;
j–;
while(tot=n*n){
i0?i=n-1:i=i;
j0?j=n-1:j=j;
if(a[i][j]){
i=x;
j=y+1;
}
a[i][j]=++tot;
x=i;
y=j;
i–;
j–;
}
for(i=0; in; i++){
for(j=0; jn; j++)
coutsetw(3)a[i][j];
coutendl;
}
return 0;
}
//(2)求單偶幻方
#includeiostream.h
#includeiomanip.h
int main(){
int n,i=0,j=0,a[100][100],tot=0;
cout”請輸入4的倍數”endl;
cinn;
for(i=0; in; i++)
for(j=0; jn; j++){
a[i][j]=++tot;
}
for(i=0; in; i++){
for(j=0; jn; j++){
if(i%4==j%4||i%4+j%4==3)
a[i][j]=n*n+1-a[i][j];
}
}
for(i=0; in; i++){
for(j=0; jn; j++){
coutsetw(4)a[i][j];
}
coutendl;
}
return 0;
}
原創文章,作者:CDHA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/144897.html