C/C++培训
美国上市C/C++培训机构

400-111-8989

热门课程

C++基础(29)信息学奥赛初学者指南函数应用2解析

  • 时间:2018-06-22 15:57
  • 发布:C++培训
  • 来源:网络

【习题解析】

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;

}

上一篇:C++开发中auto的讲解教程
下一篇:学习C++掌握这三个知识点,菜鸟秒变大神

C++基础(29)信息学奥赛初学者指南函数应用2解析

C++开发中auto的讲解教程

C++培训中-简单,堆排序的讲解

C++制作经典游戏拳皇97

选择城市和中心
贵州省

广西省

海南省