| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 418 人关注过本帖
标题:c++改错
只看楼主 加入收藏
junjie921127
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2012-9-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
c++改错
求高手指点啊,一个程序要求100内的所有可以表示为连续素数之和的素数,。最终显示为
5=2+3
。。。。。。
83=11+13+17+19+23
97=29+31+37
改了半天还是不对,求高手指点下啊

#include<iostream.h>
#include<math.h>
#include<string.h>
int primes[25];
int isprime(int n)
{
    for (int i=2;i<=sqrt(n);i++)
        if(n%i==0) return 0;
    return 1;
}
int fun(int i,int &j,int &k)
{
    int sum;
    j=k=0;
    while(k<i)
    {
        sum+=primes[k];
        if(sum>primes[i-1])
        {
            j++;
            k++;
            sum=0;
        }
        else if(sum<primes[i-1])
            k++;
        else
            return 1;
    }
    return 0;
}
void main()
{
    int i,j,low,high,count=0;
    for(i=2;i<100;i++)
    {
        if(isprime(i))  primes[count++]=i;
    }
    cout<<"小于100的素数中满足条件的素数为:"<<endl;
    for(i=0;i<count;i++)
    {
        if(fun(i+1,low,high))
        {
            cout<<primes[i]<<"=";
            for(j=low;j<high;j++) cout<<primes[j]<<"+";
            cout<<primes[high]<<endl;
        }
    }
}
搜索更多相关主题的帖子: return include 
2012-09-09 18:50
dz789989
Rank: 2
等 级:论坛游民
威 望:1
帖 子:44
专家分:95
注 册:2012-8-21
收藏
得分:7 
贴出错误代码 笨办法就是先求出所有素数(循环判断 如果除了能被自身和1除尽 那么不是素数 不然就记录下来)  然后检查是否为连续的 若是输出累加值
收到的鲜花
2012-09-09 21:23
junjie921127
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2012-9-9
收藏
得分:0 
回复 2楼 dz789989
求详细的出错地方,和解决方法啊。
2012-09-09 22:20
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
其实是挺有意思的一道题。今天晚了,明天如果我有空的话再调调吧。
收到的鲜花
2012-09-09 23:37
zhangri_123
Rank: 2
等 级:论坛游民
帖 子:5
专家分:20
注 册:2012-8-31
收藏
得分:0 
#include<iostream>
#include<math.h>
#include<string.h>

using namespace std;
int primes[25];
int isprime(int n)
{
    for (int i=2;i<=sqrt((float)n);i++)
        if(n%i==0) return 0;
    return 1;
}
int fun(int i,int &j,int &k)
{
    int sum = 0;
    j=k=0;
    while(k < i - 1)
    {
        sum+=primes[k];
        if(sum>primes[i-1])
        {
            j++;
            k = j;
            sum=0;
        }
        else if(sum<primes[i-1])
            k++;
        else
            return 1;
    }
    return 0;
}
int main()
{
    int i,j,low,high,count=0;
    for(i=2;i<100;i++)
    {
        if(isprime(i))  primes[count++]=i;
    }
    cout<<"小于100的素数中满足条件的素数为:"<<endl;
    for(i=0;i<count;i++)
    {
        if(fun(i+1,low,high))
        {
            cout<<primes[i]<<"=";
            for(j=low;j<high;j++) cout<<primes[j]<<"+";
            cout<<primes[high]<<endl;
        }
    }

    return 0;
}
收到的鲜花
2012-09-10 10:27
zhangri_123
Rank: 2
等 级:论坛游民
帖 子:5
专家分:20
注 册:2012-8-31
收藏
得分:7 
主要有一下几点问题:
1、fun函数sum变量没有初值0,报错
2、逻辑问题,应该是从最小的素数开始相加,一直加到大于当前素数也就是primes[i - 1]时,  if(sum>primes[i-1])
         {
             j++;最小值加一
             k = j;//重新开始从最小值开始累加
             sum=0;//累加和清零
         }
3、我用的是Visual Studio 2008,sqrt函数报重载错误,所以我在自己的函数中添加了强制转换,也许你那里没有这个问题
4、fun函数中循环条件应该改为while(k < i - 1),因为传入参数时传递的是 if(fun(i+1,low,high)),会出现3 = 3,5 = 5的情况
2012-09-10 10:38
junjie921127
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2012-9-9
收藏
得分:0 
回复 6楼 zhangri_123
谢谢各位了,我刚申请的号,不会给你们加分。
谢谢各位访客。
2012-09-10 21:39
junjie921127
Rank: 1
等 级:新手上路
帖 子:5
专家分:2
注 册:2012-9-9
收藏
得分:0 
回复 4楼 pangding
谢谢谢谢,希望下次你还能帮忙。加分。
2012-09-10 21:42
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:7 
以下是引用junjie921127在2012-9-10 21:39:15的发言:

谢谢各位了,我刚申请的号,不会给你们加分。
谢谢各位访客。

6楼回答的比较清楚了。

给我们加分的方法是结帖。有三种方法给我们加分,一是根据回答者对你的帮助程度,把 20分 合理分配下去。
如果你认为问题依然没有解决,也可以选不满意结帖。如果你认为大家对你的帮助都不大,或者懒得认真发分,也可以选择散分结题,这将把 20分 平均加给我们。

我鼓励使用第一种方法结帖。这是对帮助过你的人表示感谢的好方法。
2012-09-10 23:37
快速回复:c++改错
数据加载中...
 
   



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

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