黄jz 发表于 2021-10-9 19:11:14

为什么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");
        }
}

黄jz 发表于 2021-10-9 19:33:26

这个程序是创建一个魔法矩阵的

傻眼貓咪 发表于 2021-10-9 20:07:25

不清楚你的题目要求,如果是想输出随机 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]
查看完整版本: 为什么n大于3的时候基本就没办法出结果