当前位置:编程学习 > C/C++ >>

用C语言编写程序

在下面的5×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>

void main()

{

int n;

int a[100][100];

long i,j,k,sum;

int flag;

scanf("%d",&n);

sum=0;

for(i=0;i<n;i++){scanf("%d",&a[0][i]);sum+=a[0][i];}

flag=1;

for (i=1;i<n;i++)

{ k=0;

for(j=0;j<n;j++)

{scanf("%d",&a[i][j]);k+=a[0][i];

}

if (k!=sum)

{flag=0;

}

}

if(flag) printf("yes\n");else printf("no\n");

for (i=0;i<n;i++){

for(j=0;j<n;j++)

printf("%d ",a[i][j]);

printf("\n");

}

}

#include "stdio.h"
void main()
{
 int i,j,sum;
 int s,flag=1;
    int a[5][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}};
    sum=0;
 for(j=0;j<5;j++)
 {
  sum=sum+a[0][j];
 }
 s=sum;//第一行的和
 
 //判断各行的和是否相等
    for(i=0;i<5;i++)
    {
     sum=0;
     for(j=0;j<5;j++)
     {
      sum=sum+a[i][j];
     }
     if(sum!=s)
     {
      flag=0;
      break;
     }
    }
   
    if(flag==1)//如果各行的和相等,继续判断各列是否相等
    {
     
     //判断各列的和是否相等
     for(j=0;j<5;j++)
     {
      sum=0;
      for(i=0;i<5;i++)
      {
       sum=sum+a[i][j];
      }
      if(sum!=s)
      {
       flag=0;
       break;
      }
     }
    }
   
    if(flag==1)//如果各行的和、各列的和均相等,继续判断对角线上的元素的和是否相等
    {
     sum=0;
     //判断对角线上的元素的和是否和前面的和相等
     for(i=0;i<5;i++)
     {
      sum=sum+a[i][i];
     }
  if(sum!=s)
     {
      flag=0;
     }   
    }
   
    //如果各行的和、各列的和、对角线上的元素的和均相等,继续判断副对角线上的元素的和是否相等
    if(flag==1)
    {
     sum=0;
     for(i=0;i<5;i++)
     {
      for(j=0;j<5;j++)
      {
       if((i+j)==4)
       {
        sum=sum+a[i][j];
       }
      }
     }
  if(sum!=s)
     {
      flag=0;
     }
    }
    printf("矩阵:\n");
    for(i=0;i<5;i++)
    {
     for(j=0;j<5;j++)
     {
      printf("%4d",a[i][j]);
     }
     printf("\n");
    }
    if(flag==1)
    {
     printf("是魔方矩阵\n");
    }
    else
    {
     printf("不是魔方矩阵!");
    }

}

运行截图:

你的意思是怎样给C程序加一个程序界面,就像windows窗口一样?

建议在VC++6.0下运行,VC++不是语言,他只是一个集成开发环境(也叫IDE)
他提供控件让我们可以把程序作成窗口的模式
也就是你说的那样

首先要知道什么事魔方阵 有是小时后玩的游戏 一个3*3的矩阵要求 行加起来 =列加起来 =对角线加起来 就是这个规则了

排法有很多种 我的是 先将 ‘1’排到第一行的中间一列

然后排 2-n*n 个数了排法就是   右上角法 就是

先判断前一个数是不是 N阶矩阵的倍数 比如是 3阶矩阵 就判断 前一个数不是3的倍数

如果是咱就把它的  “列不变行加1" 就是放到前一个数的下面

然后判断这个数的行是不是第一行 如果是就 把这个数的行变成3列同样加1  (i=3 k++)

否则判断这个数的列是不是最后一行如果是就把这个数的列变成1行同样减1  (k=1 i--)

整完这些之后判断当前这个数的位置上到底有没有数 如果有的话就放到前一个数的下面 这里因为开始判断的时候 行和列都已经改变了所以要( i+2 k-1)如果没有数的话就可以放上去了 具体的代码如下

#include<stdio.h>#define N 5   //最佳显示出15阶void main(){ int a[N][N]={0},i,k,n;i=0;//第一行k=(N+1)/2-1;//中间的一个a[i][k]=1;//第一行中间一列等于1for(n=2;n<=N*N;n++)//从2 开始排{ if((n-1)%N==0)  //如果前一个数是这个数的倍数则 列不变行加1 i++; else if(i==0) //如果一个数的行为0 则行为3列加一 { i=N-1; k++;} else if(k==N-1)//如果列为3 则列为0 行-1 { k=0;  i--; } else { i--; k++;} //这里是判断能否输出 if(a[i][k]==0)//该元素为0,继续执行程序 a[i][k]=n;else     //如果该元素不为0,就说明要填的数的位置已经被占,则该数放在上一个数的下面 { i=i+2;   //因为此时的i在上面已经变到了最上面去了所以要向下移动比如4在3下面 k=k-1;a[i][k]=n; }} //输出矩阵for(i=0;i<N;i++) { for(k=0;k<N;k++) printf("%4d",a[i][k]); printf("\n");}}
修改N就可以输出3~17阶中的奇数阶  

上一个:c语言问题(编程问题)
下一个:C语言 可变参数列表

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,