马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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");
}
}
|