鱼C论坛

 找回密码
 立即注册
查看: 1668|回复: 2

为什么n大于3的时候基本就没办法出结果

[复制链接]
发表于 2021-10-9 19:11:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>


  4. int main()
  5. {
  6.         time_t t;
  7.         srand(unsigned(time(&t)));
  8.         int n,max,i=0,j,k,temp,example,example1,flag=1,duijiaoxian;
  9.         printf("请输入一个奇数:");
  10.         scanf("%d",&n);
  11.         max=n*n;
  12.         int shuzu[n][n],shuju[max];
  13.         while(1)
  14.         {
  15.                 i=0;
  16.                 while(1)              //创建一个一维随机数组,其中里面的数不大于n*n且不重复
  17.           {
  18.                 if(i==max)
  19.                 break;
  20.                 else if(i==0)
  21.                 {
  22.                         temp=rand()%max+1;
  23.                         shuju[i]=temp;
  24.                         i=i+1;
  25.                 }
  26.                 else
  27.                 {
  28.                         temp=rand()%max+1;
  29.                         for(j=0;j<=i-1;j++)
  30.                         {
  31.                                 if(shuju[j]==temp)
  32.                                 {
  33.                                         i=i-1;
  34.                                         break;
  35.                                 }
  36.                                 shuju[i]=temp;
  37.                         }
  38.                         i++;
  39.                 }
  40.            }
  41.           k=0;
  42.           example=0;
  43.           for(i=0;i<n;i++)       //将一维随机数组里的数放进二维数组里面
  44.           {
  45.                   for(j=0;j<n;j++)
  46.                   {
  47.                           shuzu[i][j]=shuju[k];
  48.                           k=k+1;
  49.                 }
  50.           }
  51.           for(i=0;i<=0;i++)      //将二维数组里面的第一行的数相加得到一个数,作为与其他行与列的和的比较对象
  52.           {
  53.                   for(j=0;j<n;j++)
  54.                   {
  55.                           example=example+shuzu[i][j];
  56.                 }
  57.           }
  58.           for(i=0;i<n;i++)       //每一行的和比较
  59.           {
  60.                   example1=0;
  61.                   for(j=0;j<n;j++)
  62.                   {
  63.                           example1=example1+shuzu[i][j];
  64.                 }
  65.                 if(example1!=example)
  66.                 {
  67.                         flag=0;
  68.                         break;
  69.                 }
  70.           }
  71.           for(i=0;i<n;i++)     //每一列的和比较
  72.           {
  73.                   example1=0;
  74.                   for(j=0;j<n;j++)
  75.                   {
  76.                           example1=example1+shuzu[j][i];
  77.                 }
  78.                 if(example1!=example)
  79.                 {
  80.                         flag=0;
  81.                         break;
  82.                 }
  83.           }
  84.           j=0;
  85.           duijiaoxian=0;
  86.           for(i=0;i<n;i++)      //对角线的和的比较
  87.           {
  88.                   duijiaoxian=duijiaoxian+shuzu[i][j];
  89.                   j=j+1;
  90.           }
  91.           if(duijiaoxian!=example)
  92.           {
  93.                   flag=0;
  94.           }
  95.           if(flag==1)       //标志位为1则跳出循环
  96.           {
  97.                   break;
  98.           }
  99.           else
  100.           {
  101.                   flag=1;
  102.           }
  103.         }
  104.         for(i=0;i<n;i++)     // 输出符合要求的二维数组
  105.         {
  106.                 for(j=0;j<n;j++)
  107.                 {
  108.                         printf("%d ",shuzu[i][j]);
  109.                 }
  110.                 printf("\n");
  111.         }
  112. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-9 19:33:26 | 显示全部楼层
这个程序是创建一个魔法矩阵的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-9 20:07:25 | 显示全部楼层
不清楚你的题目要求,如果是想输出随机 n*n 矩阵(n 为奇数)代码如下:希望对你有帮助
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(){
  4.     int n;
  5.     printf("请输入一个奇数:");
  6.     scanf("%d", &n);
  7.     int arr[n*n];
  8.     int res[n][n];
  9.     for(int i=1; i<=(n*n); i++) arr[i] = i;
  10.     for(int i=0; i<(n*n); i++){
  11.         int temp = arr[i];
  12.         int x = rand()%(n*n);
  13.         arr[i] = arr[x];
  14.         arr[x] = temp;
  15.     }
  16.     int k = 0;
  17.     for(int i=0; i<n; i++) for(int j=0; j<n; j++) res[i][j] = arr[k++];
  18.     for(int i=0; i<n; i++){
  19.         for(int j=0; j<n; j++) printf("%2d ", res[i][j]);
  20.         printf("\n");
  21.     }
  22.     return 0;
  23. }
复制代码
  1. 请输入一个奇数:5
  2. 8  7  6 15 23
  3. 10  1  0 24 13
  4. 12 20  3 14 21
  5. 16 11  4  9  2
  6. 19 22  5 18 17
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 16:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表