首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C程序在创建数组和写入.txt文件时耗时很长

C程序在创建数组和写入.txt文件时耗时很长
EN

Stack Overflow用户
提问于 2018-09-30 07:40:37
回答 1查看 38关注 0票数 0

我尝试为256 x 256的数组创建一个从0到31的随机整数数组。代码可以工作,因为我可以很好地处理较小的数组。但是,当尝试创建256x256阵列并将其写出到.txt文件时,它将永远运行。我是个C新手,所以如果有任何关于如何解决这个问题的建议,我将不胜感激。谢谢

代码语言:javascript
复制
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define MaxC 256
#define MaxL 256

 int main(){

 FILE *fp;
 fp = fopen("arrays256.txt","w+");
     int c[257] = {0};
     int i=0,j=0,r;
     int n[MaxC][MaxL] = {{0}};

     //int* n = (int*)malloc(MaxC * MaxL * sizeof(int));
     srand(time(NULL));

     for(i = 0; i < MaxC; i++) {

       for(j = 0; j < MaxL; j++) {

         do {
            r=(rand()%32);
         } while( c[r] > 258);
         ++c[r];
         n[i][j]=r;
         printf("%3d",n[i][j]);
         fprintf(fp,"%3d",n[i][j]);
       }

       printf("\n");
       fprintf(fp,"\n");

     }
     //free(n);
     fclose(fp);
     return 0;

 }
EN

回答 1

Stack Overflow用户

发布于 2018-09-30 07:48:03

考虑以下因素的影响:

代码语言:javascript
复制
do {
    r=(rand()%32);
} while( c[r] > 258);
++c[r];

由于ij上的循环,此代码将被执行MaxC*MaxL次,即256.256= 65,536次。每次都会选择0到31范围内的某个r。如果r超过258,则while循环将排除选择c[r]。这会导致各种c[r]递增,r的范围从0到31。

考虑当循环被执行259·32= 8,288次时会发生什么。则32个c[r]中的每一个必须已递增到259。在这一点上,没有不满足c[r] > 258c[r],因此while循环永远继续。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52573415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档