为什么n大于3的时候基本就没办法出结果
#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,shuju;
while(1)
{
i=0;
while(1) //创建一个一维随机数组,其中里面的数不大于n*n且不重复
{
if(i==max)
break;
else if(i==0)
{
temp=rand()%max+1;
shuju=temp;
i=i+1;
}
else
{
temp=rand()%max+1;
for(j=0;j<=i-1;j++)
{
if(shuju==temp)
{
i=i-1;
break;
}
shuju=temp;
}
i++;
}
}
k=0;
example=0;
for(i=0;i<n;i++) //将一维随机数组里的数放进二维数组里面
{
for(j=0;j<n;j++)
{
shuzu=shuju;
k=k+1;
}
}
for(i=0;i<=0;i++) //将二维数组里面的第一行的数相加得到一个数,作为与其他行与列的和的比较对象
{
for(j=0;j<n;j++)
{
example=example+shuzu;
}
}
for(i=0;i<n;i++) //每一行的和比较
{
example1=0;
for(j=0;j<n;j++)
{
example1=example1+shuzu;
}
if(example1!=example)
{
flag=0;
break;
}
}
for(i=0;i<n;i++) //每一列的和比较
{
example1=0;
for(j=0;j<n;j++)
{
example1=example1+shuzu;
}
if(example1!=example)
{
flag=0;
break;
}
}
j=0;
duijiaoxian=0;
for(i=0;i<n;i++) //对角线的和的比较
{
duijiaoxian=duijiaoxian+shuzu;
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);
}
printf("\n");
}
} 这个程序是创建一个魔法矩阵的 不清楚你的题目要求,如果是想输出随机 n*n 矩阵(n 为奇数)代码如下:希望对你有帮助
#include <stdio.h>
#include <stdlib.h>
int main(){
int n;
printf("请输入一个奇数:");
scanf("%d", &n);
int arr;
int res;
for(int i=1; i<=(n*n); i++) arr = i;
for(int i=0; i<(n*n); i++){
int temp = arr;
int x = rand()%(n*n);
arr = arr;
arr = temp;
}
int k = 0;
for(int i=0; i<n; i++) for(int j=0; j<n; j++) res = arr;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++) printf("%2d ", res);
printf("\n");
}
return 0;
}请输入一个奇数:5
876 15 23
1010 24 13
12 203 14 21
16 11492
19 225 18 17
页:
[1]