| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 763 人关注过本帖, 2 人收藏
标题:路过大虾看看噻
只看楼主 加入收藏
简单回忆
Rank: 2
来 自:郴州
等 级:论坛游民
帖 子:89
专家分:28
注 册:2011-3-19
结帖率:96.15%
收藏(2)
已结贴  问题点数:20 回复次数:14 
路过大虾看看噻
请问大虾          这个程序显示没有错  但是输不出正确的答案呢??请高手解决下咯!!!!!!!!!


这是题目         [100,999]范围内同时满足以下两个条件的十进制数. ⑴其个位数字与十位数字之和除以10所得的余数是百位数字;⑵该数是素数; 求有多少个这样的数?     15



#include"math.h"
main()
{
int i,j,l,s,k,prime(int i);
clrscr();
for(i=100;i<=999;i++)
k=0;
{
j=i%10;
l=i/10%10;
s=i/100;
if((j+l)%10==s&&prime(i))
k++;
}
printf("%d",k);
}
prime(int i)
{
int h,m;
h=sqrt(i);
for(m=1;m<=h;m++)
if(i%m==0)
break;
if(m>h)
return(1);
else
return(0);
}

搜索更多相关主题的帖子: 答案 十进制 
2011-04-17 15:14
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:4 
程序代码:
#include <stdio.h>

int main() {
    short i, j;
    char m[1000] = {0}, ans = 0;    // 数组 m 作为标志位,如果 m[i] == 1, 则 i 不是质数。
    // 对 1 ~ 999 的所有数字设置标志位,后面要用来判断是不是质数
    for (i = 3; i < 1000; i+=2) {
        if (!m[i]) {
            for (j = i * 3; j < 1000; j += i * 2) {
                m[j] = 1;
            }
        }
    }
    // i 表示一个三位数的十位,j 表示个位,(i + j) % 10 即为符合题目要求的数字的百位,当然啦,如果 (i + j) % 10 不为 0 的话
    for (i = 0; i < 10; i++) {
        for (j = 1; j < 10; j += 2) {
            if ((i + j) % 10 && !m[(i + j) % 10 * 100 + i * 10 + j]) {    // 首先判断 (i + j) % 10 是否为 0,然后检查 (i + j) % 10 * 100 + i * 10 + j 是否为质数
                //printf("%d%d%d\n", (i + j) % 10, i, j);    //要看是哪些数字只要把行首的注释去掉就好
                ans++;
            }
        }
    }
    printf("%d\n", ans);
    return 0;
}


[ 本帖最后由 voidx 于 2011-4-17 15:55 编辑 ]
2011-04-17 15:33
简单回忆
Rank: 2
来 自:郴州
等 级:论坛游民
帖 子:89
专家分:28
注 册:2011-3-19
收藏
得分:0 
大虾 小弟菜鸟 !!!请你整小弟看得懂的方法做好吧     顺便指点下我到底是哪里错 了
2011-04-17 15:47
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
代码加了注释,你在看一下。
思路如下:
首先生成一个三位数 n , 使得 n 的个位加十位取模 10 于百位相等,然后检查这个数是否为质数。
我现在取配眼镜,回来再看你的代码
2011-04-17 15:58
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:4 
楼主应该好好看看二楼的代码,争取搞清楚。从中你会发现其它人的解决问题的方法和你的有什么不同。

比如楼主是逐一查看所有的三位数。而二楼只是想办法构造出满足第一个条件的三位数。
这个想法很好。因为条件(1)对十位和个位几乎是没有限制的,但百位用后两位又能构造出来,所以不用遍历所有的三位数。

另一个就是查是不是质数,这里二楼是先把三位数以内的质数全筛出来。做成 hash 表,后面再查就行了。


他的程序是先生成的 hash 表,然后再开始做这个题。两个部分分的很明显。楼主可以仔细研究一下。
2011-04-18 00:45
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
程序代码:
h = (int) sqrt(i); // sqrt返回值是 double 型,要显式转换为 int 

//==========我是分割线============
for (m = 1; m <= h; m++) {    // 楼主你这个 for 循环恒被 break, 因为 m = 1
    if (i % m == 0) {    // 任何数取模 1 结果都为 0,试除法判定质数的时候应该从 2 开始
        break;
    }
}

//==========我是分割线============
k = 0;    // 放在这里
for(i=100;i<=999;i++)
//k=0;    // 楼主你这个错误有点说不过去了啊,自已也要尽力去 debug 啊
{
j=i%10;
l=i/10%10;
s=i/100;
if((j+l)%10==s&&prime(i))
k++;
}


[ 本帖最后由 voidx 于 2011-4-20 17:33 编辑 ]
2011-04-18 01:00
简单回忆
Rank: 2
来 自:郴州
等 级:论坛游民
帖 子:89
专家分:28
注 册:2011-3-19
收藏
得分:0 
回复 5楼 pangding
恩恩         学习
2011-04-18 21:37
简单回忆
Rank: 2
来 自:郴州
等 级:论坛游民
帖 子:89
专家分:28
注 册:2011-3-19
收藏
得分:0 
回复 4楼 voidx
大虾啊          你配眼镜那么久啊               不知何时能给小弟发下我的那种思路的代码呢???你的我研究了蛮久了            还是有些想不到
2011-04-18 21:45
简单回忆
Rank: 2
来 自:郴州
等 级:论坛游民
帖 子:89
专家分:28
注 册:2011-3-19
收藏
得分:0 
回复 6楼 voidx
对的 呢             可是还是输出不了正确的答案呢!!!!请问大虾是否还能找出这个程序的其它原因呢!!!!不胜感激
2011-04-18 21:49
走停停
Rank: 2
等 级:论坛游民
帖 子:19
专家分:24
注 册:2011-3-31
收藏
得分:4 
你的素数判断错了:for(m=2;m<i;m++)
2011-04-18 23:24
快速回复:路过大虾看看噻
数据加载中...
 
   



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

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