| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1210 人关注过本帖
标题:随机数文件处理问题
只看楼主 加入收藏
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
结帖率:93.94%
收藏
已结贴  问题点数:20 回复次数:4 
随机数文件处理问题
以下是我编写的程序,suijishu-600600.txt是7.5G大的0-600600之间的随机数时,程序运行不了;但是当suijishu-600600.txt是1.5G大的0-60600之间的随机数时,程序运行的了,请问为什么?谢谢!
suijishu-600600.txt是7.5G大的0-600600之间的随机数时,程序运行不了;但是当suijishu-600600.txt是1.5G大的0-60600之间的随机数时,程序运行的了,请问为什么?谢谢!

#include"stdio.h"
#include"stdio.h"
#include"stdlib.h"
#define N 1201200000  //总行数   
FILE *str,*date2;
struct motif
{
int shu;
}lead[N];
void main()
{
 int i,j,k,sum=0,a=0;
 date2=fopen("E:\\suijishu-600600.txt","rt");
 str=fopen("E:\\fenbu-result-600600.txt","wt");
 for(i=0;i<N;i++)
 fscanf(date2,"%d\n",&lead[i].shu);     //使用换行读取,不知为何,使用制表符读取时总出错
 for(i=1;i<=N;i+=600600)       //每x(20)个数一组进行计算
 {
   for(j=i;j<i+600600;j++)   //  每x(20)个数一组进行计算
   {
      for(k=j;k>i;k--)
      if(lead[k].shu<=599&&lead[j].shu==lead[k].shu)   //lead[k].shu<=399中的399表示4400按1:10的分界点,这样399前的数字代表目标粒子情况
      a++;     //如果a>1表明这个数与前面重复了
      if(a==1)   //a==1之所以行,是因原数与自己比较了,所以有1s
      sum++;
      a=0;    //重新赋值0,否则下次循环会在上次数值之上累加,a将永远不为0
   }
   if(sum%3==0)    //sum%2中分母2表示总洞数/200的值d
   fprintf(str,"%d\n",sum/3);   //sum/1中分母1表示总洞数/200的值
   if(sum%3!=0)   //sum%2中分母2表示总洞数/200的值
   fprintf(str,"%d\n",1+sum/3);   //sum/1中分母1表示总洞数/200的值
   printf("%d\t%d\t%d\n",i/600600,i,sum);
   sum=0;       //重新赋值1,否则下次循环会在上次数值之上累加,sum越来越大
 }        
}



搜索更多相关主题的帖子: include 
2016-08-29 09:56
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
各位大侠多多指教!
2016-08-29 10:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:20 
我不知道『程序运行不了』是个什么东西,想象不出来。
我也不问,包括其它没交代的信息。
我就照着你的代码,加上“瞎猜”,硬些一个

程序代码:
#include <stdio.h>

#define A 600600 // 每A个数一组进行计算
#define B 599    // 分界点阈值
#define C 3      // 跟“总洞数”相关的一个值,不知道啥意思

int main( void )
{
    FILE* src = fopen( "E:\\suijishu-600600.txt", "rt" );
    if( !src )
        return 1;

    FILE* dst = fopen( "E:\\fenbu-result-600600.txt", "wt" );
    if( !src || !dst )
    {
        fclose( src );
        return 2;
    }

    for( unsigned i=0; ; ++i )
    {
        unsigned sum = 0;
        unsigned char buf[B+1] = { 0 };
        for( unsigned j=0; j!=A; ++j )
        {
            unsigned val;
            if( fscanf(src,"%u",&val) != 1 )
            {
                fclose( dst );
                fclose( src );
                return 0;
            }

            if( val<=B && buf[val]==0 )
            {
                buf[val] = 1;
                ++sum;
            }
        }

        fprintf( dst, "%u\n", (sum+C-1)/C );
        printf( "%u\t%u\t%u\n", i, i*A, sum );
    }

    return 0;
}

2016-08-29 11:09
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
回复 3楼 rjsp
    您好,首先非常感谢您!
    我想做的是:对生成的1201200000个随机数(随机数介于0-600600间),每600600个随机数统计一次小于等于599的随机数个数(这样共统计2000次,因1201200000÷600600=2000),同时结果除以3((599+1)/200)并输出,于是程序输出2000个统计数值(我要的结果)。
    目前,按您的程序输出的结果是2000个200(不是我要的正确结果),而我目前未看出哪里出的问题,请指教,非常感谢!
2016-08-29 13:22
zhou31146001
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:303
专家分:131
注 册:2012-11-28
收藏
得分:0 
回复 3楼 rjsp
再次感谢!
已经想明白了,没有问题,谢谢!
2016-08-29 16:02
快速回复:随机数文件处理问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015867 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved