1091: 童年生活二三事(多实例测试)
1092: 素数表(函数专题)
1093: 验证哥德巴赫猜想(函数专题)
1094: 统计元音(函数专题)
1095: 时间间隔(函数专题)
1096: 水仙花数(函数专题)
1097: 计算平均成绩(函数专题)
1098: 复合函数求值(函数专题)
1099: 角谷猜想(多实例测试)
1100: 求组合数(函数专题)
1091: 童年生活二三事(多实例测试)
题目描述Redraiment小时候走路喜欢蹦蹦跳跳,他最喜欢在楼梯上跳来跳去。 但年幼的他一次只能走上一阶或者一下子蹦上两阶。 现在一共有N阶台阶,请你计算一下Redraiment从第0阶到第N阶共有几种走法。
输入
输入包括多组数据。 每组数据包括一行:N(1≤N≤40)。 输入以0结束
输出
对应每个输入包括一个输出。 为redraiment到达第n阶不同走法的数量。
样例输入 Copy
1
3
0
样例输出 Copy
1
3
来源/分类
AC代码:
#include<stdio.h>
int main()
{
int i,n,a[45];
a[1]=1;
a[2]=2;
for(i=3; i<=40; i++)
a[i]=a[i-1]+a[i-2];
while(scanf("%d", &n)){
if(n==0)
break;
printf("%d\n", a[n]);
}
return 0;
}
1092: 素数表(函数专题)
题目描述输入两个正整数m和n,输出m和n之间的所有素数。
要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。
int prime(int n)
{
//判断n是否为素数, 若n为素数,本函数返回1,否则返回0
}
对于C/C++代码的提交,本题要求必须通过定义prime函数和main函数实现,否则,提交编译错误,要提交完整的程序。
输入
输入两个正整数m和n,m<=n,且都在int范围内。
输出
输出占一行。输出m和n之间的所有素数,每个数后有一个空格。测试数据保证m到n之间一定有素数。
样例输入 Copy
2 6
样例输出 Copy
2 3 5
来源/分类
*
AC代码:
#include<stdio.h>
#include<math.h>
int prime(int n){
int i,k=(int)sqrt(n);
if(n==1)
return 0;
for(i=2; i<=k; i++){
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int i,a,b;
scanf("%d%d", &a,&b);
for(i=a; i<=b; i++){
if(prime(i))
printf("%d ", i);
}
1093: 验证哥德巴赫猜想(函数专题)
题目描述哥德巴赫猜想大家都知道一点吧。我们现在不是想证明这个结论,而是对于任给的一个不小于6的偶数,来寻找和等于该偶数的所有素数对。做好了这件实事,就能说明这个猜想是成立的。
要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。
int prime(int n)
{
//判断n是否为素数, 若n为素数,本函数返回1,否则返回0
}
对于C/C++代码的提交,本题要求必须通过定义prime函数和main函数实现,否则,提交编译错误,要提交完整的程序。
输入
一个偶数M (M是6到1000000之间的一个偶数).
输出
输出和等于该偶数的所有素数对a和b,按a递增的顺序输出,(a,b)和(b,a)被视为同一个素数对。
样例输入 Copy
40
样例输出 Copy
3 37
11 29
17 23
来源/分类
**
#include<stdio.h>
#include<math.h>
int prime(int n){
int i,k=(int)sqrt(n);
if(n==1)
return 0;
for(i=2; i<=k; i++){
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int i,n;
scanf("%d", &n);
for(i=2; i<=n/2; i++){
if(prime(i)&&prime(n-i))
printf("%d %d\n", i,n-i);
}
return 0;
}
1094: 统计元音(函数专题)
题目描述输入一个字符串,统计其中元音字母的个数。要求使用函数vowel()用来判断是否为元音,其余功能在main()函数中实现。
int vowel(char ch)
{
//如果ch是元音,返回1,否则返回0
}
本题如果是C/C++代码提交,只需要提交vowel函数的定义部分,提交其它内容,编译出错。
输入
输入一个字符串,长度不超过1000,以回车符结束。
输出
输出一个整数,表示元音字母个数。输出单独占一行。
样例输入 Copy
Hello world!
样例输出 Copy
3
来源/分类
*
int vowel(char ch)
{
if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u'||ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U')
return 1;
else
return 0;
//如果ch是元音,返回1,否则返回0
}
1095: 时间间隔(函数专题)
题目描述从键盘输入两个时间点(24小时制),输出两个时间点之间的时间间隔,时间间隔用“小时:分钟:秒”表示。要求程序定义如下两个函数,并在main()中调用这两个函数实现相应的功能,其中main函数系统已经实现,你只需要完成下面这两个函数的定义。
//把时分秒转换成秒并返回, 三个参数分别为用于表示一个时间点的时、分、秒
int HmsToS(int h, int m, int s);
//将时间段转换为对应的“小时:分钟:秒” 格式输出 ,形参s表示一个时间段的长度,单位是秒
void PrintTime(int s);
对于C/C++代码的提交,本题只需要提交HmsToS函数和PrintTime函数的定义部分,否则,提交编译错误。
输入
输入数据有多组。每组输入包括两行。第一行为时间点1,第二行为时间点2,时间点均以“HH:MM:SS”的格式输入。测试数据保证时间点1早于时间点2。
输出
对应每组数据,有一行输出,以“HH:MM:SS”的格式输出时间间隔。注意不足两位要补占位符0。格式参看输入输出。
样例输入 Copy
12:01:12
13:09:43
12:40:12
13:09:43
样例输出 Copy
01:08:31
00:29:31
提示
注意:要输出01:08:31中的占位符0,printf中的格式控制符用"%02d"
来源/分类
*
*//把时分秒转换成秒并返回, 三个参数分别为用于表示一个时间点的时、分、秒
int HmsToS(int h, int m, int s){
return s+m*60+h*3600;
}
//将时间段转换为对应的“小时:分钟:秒” 格式输出 ,形参s表示一个时间段的长度,单位是秒
void PrintTime(int s){
int h=0,m=0,sec;
h=s/3600;
m=(s%3600)/60;
sec=s-h*3600-m*60;
printf("%02d:%02d:%02d\n", h,m,sec);
}
1096: 水仙花数(函数专题)
题目描述春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+33。
现在要求输出所有在m和n范围内的水仙花数。
要求程序定义一个narcissus()函数和一个main()函数,narcissus()函数判断一个整数n是否为水鲜花数,其余功能在main()函数中实现。
int narcissus(int n)
{
//判断n是否为水仙花数, 若是函数返回1,否则返回0
}
对于C/C++代码的提交,本题要求必须通过定义narcissus函数和main函数实现,否则,提交编译错误,要提交完整的程序。
输入
输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。
输出
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
样例输入 Copy
100 120
300 380
样例输出 Copy
no
370 371
提示
在不知道m到n之间有多少个水仙花数的情况下,如何控制两个数之间有空格,而最后一个水仙花数之后没有空格?解决方法之一是:第一个水仙花数之前不加空格,而其后每个水仙花数之前加空格。而通过一个标识变量可以判断出是否是第一个水仙花数。
初做多实例测试,要注意变量赋初值的位置。
来源/分类
**
#include<stdio.h>
int narcissus(int n)
{
int n1 = n%10;
int n2 = n%100/10;
int n3 = n/100;
if(n==(n1*n1*n1)+(n2*n2*n2)+(n3*n3*n3))
return 1;
else
return 0;
}
int main(){
int n,m,i;
while(scanf("%d %d", &n,&m)!=EOF){
int flag=0;
for(i=n; i<=m; i++){
if(narcissus(i)){
flag++;
if(flag==1){
printf("%d", i);
}else{
printf(" %d", i);
}
}
}
if(flag==0)
printf("no\n");
else
printf("\n");
}
}
1097: 计算平均成绩(函数专题)
题目描述输入某位同学各门课的成绩,输出平均成绩。输入的成绩均为五级制成绩,五级制成绩转换为百分之成绩的规则如下:'A’转换为百分之成绩为95分,'B’对应85分,C对应75分,'D’对应65分,'E’对应40分。 输出的平均成绩为一个实数,保留1位小数。
要求程序定义一个getScore()函数和一个main()函数,getScore()函数返回一个等级对应的分数,其余功能在main()函数中实现。
int getScore(char g)
{
//把等级g转换成对应的分数并返回这个分数。
}
对于C/C++代码的提交,本题要求必须通过定义getScore函数和main函数实现,否则,提交编译错误,要提交完整的程序。
输入
输入为一行只包含’A’~'E’的字母,每个字母表示一门课的成绩,
输出
输出平均成绩,为一个实数,保留一位小数。
样例输入 Copy
AABB
样例输出 Copy
90.0
来源/分类
*
#include<stdio.h>
int getScore(char g)
{
//把等级g转换成对应的分数并返回这个分数。
if(g=='A')
return 95;
else if(g=='B')
return 85;
else if(g=='C')
return 75;
else if(g=='D')
return 65;
else
return 40;
}
int main(){
double total=0,n=0;
char ch;
while(scanf("%c", &ch),ch!='\n'){
total+=getScore(ch);
n++;
}
total/=n;
printf("%.1f\n", total);
}
1098: 复合函数求值(函数专题)
题目描述求复合函数F(G(x)),其中函数F(x)=|x-3|+|x+1|,函数G(x)=x^2-3x。要求编写函数funF()和funG()分别求F(x)和G(x),其余功能在main()中实现。
double funF(double x)
{
//函数返回F(x)的值;
}
double funG(double x)
{
//函数返回G(x)的值;
}
本题如果是C/C++代码提交,只需要提交funF和funG函数的定义部分,提交其它内容,编译出错。
输入
输入一个实数x。
输出
输出复合函数的值,结果保留2位小数。输出占一行。
样例输入 Copy
10.2
样例输出 Copy
144.88
来源/分类
*
double funF(double x)
{
return fabs(x-3)+fabs(x+1);
//函数返回F(x)的值;
}
double funG(double x)
{
//函数返回G(x)的值;
return x*x-3.0*x;
}
1099: 角谷猜想(多实例测试)
题目描述任何一个自然数,如果是偶数,就除以2,如果是奇数,就乘以3再加1。最后,经过若干次迭代得到1。也就是说,不管怎样迭代,不断除以2以后,最后是1。现在给你一个自然数n,求出它转变为1所需要的步数。
输入
输入数据有多组,每组输入包含一个自然数n。测试数据保证输入数据及中间结果都在int
范围内。
输出
对每组输入,输出经过角谷猜想变成1的步数。
样例输入 Copy
5
11
样例输出 Copy
5
14
来源/分类
**
#include<stdio.h>
int main(){
int n,a,b;
while(scanf("%d", &n)!=EOF){
int total = 0;
while(n!=1){
if(n%2==0)
n/=2;
else
n=n*3+1;
total++;
}
printf("%d\n", total);
}
return 0;
}
1100: 求组合数(函数专题)
题目描述马上要举办新生程序设计竞赛了,与以往不同的是,本次比赛以班为单位,为了全面衡量一个班级的整体水平,要求从一个班的m位同学中任选k位同学代表本班参加比赛,问有多少种组合方案。在计算组合方案时会用到计算阶乘的运算,要求编写函数fact(),实现求一个数的阶乘功能,函数原型如下。
int fact(int n);//计算n的阶乘并返回
对于C/C++代码的提交,本题要求必须通过定义fact函数和main函数实现,否则,提交编译错误,要提交完整的程序。
输入
输入两个正整数m,k,k<=m<=12。
输出
输出一个整数,即组合方案数。
样例输入 Copy
5 3
样例输出 Copy
10
提示
求组合数公式是 m!/(k!(m-k)!)
来源/分类
*
AC代码:
#include<stdio.h>
int fact(int n){
int i,mul=1;
for(i=1; i<=n; i++)
mul*=i;
return mul;
}
int main(){
int k,m;
long long n;
scanf("%d%d", &m,&k);
n=fact(m)/(fact(k)*fact(m-k));
printf("%lld\n", n);
return 0;
}