| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 682 人关注过本帖
标题:这段代码老出问题,不知道错在哪里?
取消只看楼主 加入收藏
HenryLin8
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2012-10-12
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:5 
这段代码老出问题,不知道错在哪里?
sdata.zip (611 Bytes)
各位高手:
我运行下面这段代码老出问题,不知道错在哪里,求指点!
程序代码:
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
int main()
{
    long start, finish;
    start=clock();
    ifstream sfile("sdata.txt",ios::in);
    const unsigned short row=9,col=26;
    unsigned short r1,c1;
    unsigned short s1[col][row];
    unsigned short (*sp)[row]=s1;
    for(r1=0;r1<row;r1++)
        for(c1=0;c1<col;c1++)
            sfile>>*(*(sp+c1)+r1);
    sfile.close();
    unsigned short res[10000];
    unsigned short *rp=res;
    unsigned short a,b,c,d,e,f,g,h,i,j,k,l,m,n; //o,p,q,r,s,t,u,v,w,x,y,z;
    unsigned short r2,z1,cln=0,halfrow=row/2;
    for(n=0;n<col-13;n++)
    for(m=n+1;m<col-12;m++)
    for(l=m+1;l<col-11;l++)
    for(k=l+1;k<col-10;k++)
    for(j=k+1;j<col-9;j++)
    for(i=j+1;i<col-8;i++)
    for(h=i+1;h<col-7;h++)
    for(g=h+1;g<col-6;g++)
    for(f=g+1;f<col-5;f++)
    for(e=f+1;e<col-4;e++)
    for(d=e+1;d<col-3;d++)
    for(c=d+1;c<col-2;c++)
    for(b=c+1;b<col-1;b++)
    for(a=b+1;a<col;a++)
    {
        z1=0;
        for(r2=1;r2<row;r2++)
        if(*(*(sp+a)+r2)+*(*(sp+b)+r2)+*(*(sp+c)+r2)+*(*(sp+d)+r2)+*(*(sp+e)+r2)+*(*(sp+f)+r2)+*(*(sp+g)+r2)+*(*(sp+h)+r2)+*(*(sp+i)+r2)+*(*(sp+j)+r2)+*(*(sp+k)+r2)+*(*(sp+l)+r2)+*(*(sp+m)+r2)+*(*(sp+n)+r2)==0) z1++;
        if(z1>=halfrow)
        {
        *(rp+cln)=*(*(sp+a));*(rp+cln+1)=*(*(sp+b));*(rp+cln+2)=*(*(sp+c));*(rp+cln+3)=*(*(sp+d));
        *(rp+cln+4)=*(*(sp+e));*(rp+cln+5)=*(*(sp+f));*(rp+cln+6)=*(*(sp+g));*(rp+cln+7)=*(*(sp+h));
        *(rp+cln+8)=*(*(sp+i));*(rp+cln+9)=*(*(sp+j));*(rp+cln+10)=*(*(sp+k));*(rp+cln+11)=*(*(sp+l));
        *(rp+cln+12)=*(*(sp+m));*(rp+cln+13)=*(*(sp+n));
        *(rp+cln+14)=z1;
        cln+=15;
        }
    }
    ofstream rfile("result.txt",ios::out);
    unsigned short x1;
    for(x1=0;x1<cln;x1++)
    {
    rfile<<*(rp+x1)<<'\t';
    if(x1==14||(x1-14)/15==0) rfile<<endl;
    }
    double duration;
    finish=clock();
    duration=(double)(finish-start)/CLOCKS_PER_SEC;
    rfile<<endl<<duration;
    rfile.close();
    return 0;
}
谢谢!数据源也一起附上。
搜索更多相关主题的帖子: clock start 
2012-11-30 11:28
HenryLin8
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2012-10-12
收藏
得分:0 
回复 2楼 mmmmmmmmmmmm
不好意思,光想着编,忘了加注释了。
数据源是9行26列的数,
我要找出任意14列组合中,行相加为零次数最多的14列的组合。
为了计算能快一点,在读入数组时,我把列读成行,行读成列,因为实际数据源的行数有上百行。
最主要下面这行
if(*(*(sp+a)+r2)+*(*(sp+b)+r2)+*(*(sp+c)+r2)+*(*(sp+d)+r2)+*(*(sp+e)+r2)+*(*(sp+f)+r2)+*(*(sp+g)+r2)+*(*(sp+h)+r2)+*(*(sp+i)+r2)+*(*(sp+j)+r2)+*(*(sp+k)+r2)+*(*(sp+l)+r2)+*(*(sp+m)+r2)+*(*(sp+n)+r2)==0) z1++;
运行的时候出现异常,不知道怎么回事。
希望高手指点。
谢谢!

本人使用:
win7旗舰版 MS OFFICE2010 C++2010
虽然脑子不好使,但喜欢玩编程。
2012-11-30 11:53
HenryLin8
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2012-10-12
收藏
得分:0 
回复 4楼 rjsp
就是
a+b+c+d+e+f+g+h+i+j+k+l+m+n==0的话,z1就加1。
然后判断z1有没有超过row的一般,是的话,就把第一列的列号记录下来。
版主有没有运行过这程序呢?
是不是代码没问题,只是超出了什么限制呢?
望指点!

本人使用:
win7旗舰版 MS OFFICE2010 C++2010
虽然脑子不好使,但喜欢玩编程。
2012-11-30 13:12
HenryLin8
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2012-10-12
收藏
得分:0 
回复 7楼 mmmmmmmmmmmm
那怎么调试?

本人使用:
win7旗舰版 MS OFFICE2010 C++2010
虽然脑子不好使,但喜欢玩编程。
2012-11-30 13:35
HenryLin8
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2012-10-12
收藏
得分:0 
回复 9楼 mmmmmmmmmmmm
能否说清楚点,具体是内存什么问题?是缓存区溢出吗?具体是什么原因造成的呢?

本人使用:
win7旗舰版 MS OFFICE2010 C++2010
虽然脑子不好使,但喜欢玩编程。
2012-11-30 14:33
HenryLin8
Rank: 1
等 级:新手上路
帖 子:38
专家分:4
注 册:2012-10-12
收藏
得分:0 
回复 11楼 寒风中的细雨
我把你的result.txt倒进excel看了下,不是我想要的结果。
首先,数据的排列有问题。
第二,同一组合共15个数其中出现两个相同的数,这不是我想要的结果。
我按同样的思路在excel的vba中运行了一下。发现我的比较值太小了。
即halfrow的值太小,可能造成满足条件的组合超出res[10000]的范围吧。
我把它设成6的话,组合数就只有一个了。
在C++不知道是不是这个原因,搞不懂。

本人使用:
win7旗舰版 MS OFFICE2010 C++2010
虽然脑子不好使,但喜欢玩编程。
2012-11-30 16:37
快速回复:这段代码老出问题,不知道错在哪里?
数据加载中...
 
   



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

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