| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1315 人关注过本帖
标题:在一个平台上提交问题,测试各种运行都对,提交时却提示运行错误。。谁能帮 ...
只看楼主 加入收藏
shenshaoqing
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-12-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
在一个平台上提交问题,测试各种运行都对,提交时却提示运行错误。。谁能帮忙看下问题出在哪里吗?
#include<stdio.h>
int main()
{
    int a,b;
    scanf("%d",&a);
    for(b=0;b<a;b++){
    int num;
    scanf("%d",&num);
    num+=1;
    int* poi;
    poi=(int*)malloc(sizeof(int)*num);
    int i,x,cnt=0;
    for(i=0;i<num;i++){
        poi[i]=1;
    }
    for(x=2;x<num;x++){
        if(poi[x]){
            for(i=2;i*x<num;i++){
                poi[i*x]=0;
            }
        }
    }
    for(i=2;i<num;i++){
        if(poi[i]){
            cnt++;
            //printf("%d\n",cnt);
        }
    }
    printf("%d\n",cnt);

}
   
    return 0;
   
}
这是一个求素数个数的问题
搜索更多相关主题的帖子: include 
2016-12-07 12:00
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:4 
少一个头文件吧
#include <stdlib.h>
malloc()函数在stblib.h这个头文件里面,不知道是不是这个问题

Code is my life.
2016-12-07 12:35
shenshaoqing
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-12-7
收藏
得分:0 
回复 2楼 bjut_Allen
试过了。。。不是,但还是thinkyou
2016-12-07 12:42
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:4 
回复 3楼 shenshaoqing
把你的变量定义全放到代码块的最前面去试试看行不行。
2016-12-07 12:56
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:4 
对4楼的说法进行补充:
浅试代码:发现这样会出现输入同一个数据出现不同的值的情况,估计是某些值没有重置的情况,属于代码处理方面的问题

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-07 13:01
shenshaoqing
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-12-7
收藏
得分:0 
回复 4楼 yangfrancis
然而并没有用。。。
2016-12-07 14:55
shenshaoqing
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-12-7
收藏
得分:0 
回复 5楼 九转星河
确实是这样,谢谢。但是改完后还是错误。。。
2016-12-07 14:56
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:4 
基本算法没什么大问题,不过应该包含num,即所有循环条件改成x<=num、i*x<=num,因为你输入的num本身可能就是质数,我建立素数表的循环代码如下(将乘法变成加法可提高算法效率):
    for(x=2;x<=num;x++){
        if(poi[x]){
            for(i=x+x;i<=num;i+=x)
            {
                if(poi[i]) poi[i]=0;   //加个判断可减少赋值压力,提高运算速度
            }

对于int cnt=0这是定义语句,初始化只有一次,因此素数计数循环里还是要加上,修改为for(i=2,cnt=0;i<=num;i++){

[此贴子已经被作者于2016-12-7 15:35编辑过]

2016-12-07 15:27
marlow
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:125
专家分:419
注 册:2016-7-18
收藏
得分:4 
/* 找出素数  */
#include <stdio.h>
#include <stdlib.h>

int main()
{
        int num;
        
        scanf("%d", &num);
        num    +=    1;
        int* poi;
        poi=(int*)malloc(sizeof(int)*num);
        int i, x, cnt = 0;
        for(i = 0; i < num; i++){
            poi[i] = i;
        }
        for(x = 2; x < num; x++){
            if(poi[x]){
                for(i = 2; i * x < num; i++){
                    poi[i*x]=0;
                }
            }
        }
        for(i = 2; i < num; i++){
            if(poi[i]){
                cnt++;
                printf("%d\n",poi[i]);
            }
        }
        printf("素数共有%d个\n",cnt);
        return 0;
}

一切都在学习、尝试、摸索中
2016-12-07 19:21
快速回复:在一个平台上提交问题,测试各种运行都对,提交时却提示运行错误。。谁 ...
数据加载中...
 
   



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

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