


C/C++培训
达内IT学院
400-996-5531

【习题解析】
1411 区间内的真素数
【题目描述】
找出正整数M和N之间(N不小于M)的所有真素数。
真素数的定义:如果一个正整数P为素数,且其反序也为素数,那么P就为真素数。
例如,11,13均为真素数,因为11的反序还是为11,13的反序为31也为素数。
【输入】
输入两个数M和N,空格间隔,1≤M≤N≤100000。
【输出】
按从小到大输出M和N之间(包括M和N)的真素数,逗号间隔。如果之间没有真素数,则输出No。
【输入样例】
10 35
【输出样例】
11,13,17,31
【参考程序】
#include <cstdio> int isPrime(int a) { int i; if(a<2)return 0; for(i=2;i*i<=a;i++) if(a%i==0)return 0; return 1; } int f(int a) { int b=0; while(a) { b*=10; b+=a%10; a/=10; } return b; } int main() { int m,n,i,k=0; scanf("%d%d",&m,&n); for(i=m;i<=n;i++) if(isPrime(i)&&isPrime(f(i))) { if(k)printf(","); printf("%d",i); k++; } if(k==0)printf("No"); return 0; }
1408素数回文数的个数
【题目描述】
求11到n之间(包括n),既是素数又是回文数的整数有多少个。
【输入】
一个大于11小于1000的整数n。
【输出】
11到n之间的素数回文数个数。
【输入样例】
23
【输出样例】
1
【提示】
提示:
回文数指左右对称的数,如:292,333。
【参考程序】
#include <cstdio> int isPrime(int a) { int i; if(a<0)return 0; for(i=2;i*i<=a;i++) if(a%i==0)return 0; return 1; } int isData(int a) { if(1<=a&&a<=99) { if(a/10==a%10)return 1; else return 0; } else if(100<=a&&a<=999) { if(a/100==a%10)return 1; else return 0; } } int main() { int n,i,cnt=0; scanf("%d",&n); for(i=1;i<=n;i++) if(isPrime(i)&&isData(i)) cnt++; printf("%d",cnt); return 0; }
1157 哥德巴赫猜想
题目描述
哥德巴赫猜想(任何充分大的偶数都可由两个素数之和表示)。输入a,b,将a到b中的所有偶数分别用两个素数之和表示。输出为:
4=2+2
6=3+3
….
a,b<=100;
输入
输入两个整数a,b(a,b<=100)
输出
输出哥德巴赫猜想表达式子
样例输入
4 10
样例输出
4=2+2
6=3+3
8=3+5
10=3+7
样例输入
50 100
【参考程序】
#include <cstdio> int isPrime(int n) { int i; if(n<2)return 0; for(i=2;i*i<=n;i++) if(n%i==0)return 0; return 1; } int main() { int i,j,a,b; for(i=6;i<=100;i++) if(i%2==0) { for(j=2;j<i;j++) { a=j,b=i-j; if(isPrime(a)&&isPrime(b)) { printf("%d=%d+%d\n",i,a,b); break; } } } return 0; }
1407 笨小猴
[题目描述]
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
[输入格式]:
输入只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
[输出格式]:
输出共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
[输入样例#1]:
error
[输出样例#1]:
Lucky Word
2
[输入样例#2]:
olympic
[输出样例#2]:
No Answer
0
【参考程序】
int main() { int maxn=0,minn=1000; string s; int i; cin>>s; for(i=0;i<s.length();i++) abc[s[i]-'a']+=1; for(i=0;i<26;i++) { if(maxn<abc[i]) maxn=abc[i]; if(minn>abc[i]&&abc[i]!=0) minn=abc[i]; } if(isprime(maxn-minn)==true) cout<<"Lucky Word"<<endl<<(maxn-minn)<<endl; else cout<<"No Answer"<<endl<<0<<endl; return 0; }
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有