|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- int main()
- {
- time_t t;
- srand(unsigned(time(&t)));
- int n,max,i=0,j,k,temp,example,example1,flag=1,duijiaoxian;
- printf("请输入一个奇数:");
- scanf("%d",&n);
- max=n*n;
- int shuzu[n][n],shuju[max];
- while(1)
- {
- i=0;
- while(1) //创建一个一维随机数组,其中里面的数不大于n*n且不重复
- {
- if(i==max)
- break;
- else if(i==0)
- {
- temp=rand()%max+1;
- shuju[i]=temp;
- i=i+1;
- }
- else
- {
- temp=rand()%max+1;
- for(j=0;j<=i-1;j++)
- {
- if(shuju[j]==temp)
- {
- i=i-1;
- break;
- }
- shuju[i]=temp;
- }
- i++;
- }
- }
- k=0;
- example=0;
- for(i=0;i<n;i++) //将一维随机数组里的数放进二维数组里面
- {
- for(j=0;j<n;j++)
- {
- shuzu[i][j]=shuju[k];
- k=k+1;
- }
- }
- for(i=0;i<=0;i++) //将二维数组里面的第一行的数相加得到一个数,作为与其他行与列的和的比较对象
- {
- for(j=0;j<n;j++)
- {
- example=example+shuzu[i][j];
- }
- }
- for(i=0;i<n;i++) //每一行的和比较
- {
- example1=0;
- for(j=0;j<n;j++)
- {
- example1=example1+shuzu[i][j];
- }
- if(example1!=example)
- {
- flag=0;
- break;
- }
- }
- for(i=0;i<n;i++) //每一列的和比较
- {
- example1=0;
- for(j=0;j<n;j++)
- {
- example1=example1+shuzu[j][i];
- }
- if(example1!=example)
- {
- flag=0;
- break;
- }
- }
- j=0;
- duijiaoxian=0;
- for(i=0;i<n;i++) //对角线的和的比较
- {
- duijiaoxian=duijiaoxian+shuzu[i][j];
- j=j+1;
- }
- if(duijiaoxian!=example)
- {
- flag=0;
- }
- if(flag==1) //标志位为1则跳出循环
- {
- break;
- }
- else
- {
- flag=1;
- }
- }
- for(i=0;i<n;i++) // 输出符合要求的二维数组
- {
- for(j=0;j<n;j++)
- {
- printf("%d ",shuzu[i][j]);
- }
- printf("\n");
- }
- }
复制代码 |
|