3-1 打印3个相邻字母(20分)
题目内容:
当用户输入一个英文字母后,程序能够按照字母表的顺序打印出3个相邻的字母,其中用户输入的字母在中间。
程序运行结果如下:
d
cde
这里假设字母表首尾两个字母是相连的。若输入字母Z,则程序输出YZA。
输入格式:
一个字母字符,可能为大写,也可能为小写。
输出格式:
连续3个字符,大小写不变。
输入样例:
d
输出样例:
cde
时间限制:2000ms内存限制:32000kb
#include <iostream>
using namespace std;
int main()
{
char left, right, mid;
cin>>mid;
left = mid-1;
right= mid+1;
switch(mid)
{
case 'a': left = 'z'; break;
case 'A': left = 'Z'; break;
case 'z': right= 'a'; break;
case 'Z': right= 'A'; break;
}
cout<<left<<mid<<right<<endl;
return 0;
}
3-2 歌唱大赛选手成绩计算(20分)
题目内容:
歌唱大赛选手成绩计算方法如下:去掉一个最高分,去掉一个最低分,将剩下分数的平均值作为选手的最后成绩。这里假设共有10位评委,都是按照百分制打分。
程序运行结果如下:
88 90 97 89 85 95 77 86 92 83
88.5
如果评委给出的成绩不在0~100分之间,将给出错误提示。
程序运行结果如下:
101 90 97 89 85 95 77 86 92 83
the score is invalid.
输入格式:
10个[0,100]之间的数.
输出格式:
1个可以表示小数的数或者提示信息“the score is invalid.”
平均值变量使用double型。
输入样例:
88 90 97 89 85 95 77 86 92 83
输出样例:
88.5
时间限制:2000ms内存限制:32000kb
#include <iostream>
using namespace std;
int main()
{
int score[10];
int max = 0;
int min=100;
int sum=0;
int i;
for( i=0; i<10; i++)
{
cin>>score[i];
if(score[i]<0||score[i]>100)
break;
if(score[i]>max) max = score[i];
if(score[i]<min) min = score[i];
sum += score[i];
}
if(i!=10)//这里用了一个间接的判定方法
cout<<"the score is invalid."<<endl;
else
{
sum = sum-max-min;
double average = 1.0*sum/8;
cout<<average<<endl;
}
return 0;
}
//错误提示信息建议直接复制
3-3 猴子吃桃(20分)
题目内容:
有一天,某只猴子摘了一些桃子,当时吃了一半,又不过瘾,于是就多吃了一个。以后每天如此,到第n天想吃时,发现就只剩下一个桃子。输入n,表示到第n天剩下1个桃子,请计算第一天猴子摘的桃子数。
程序运行结果如下:
10
1534
输入格式:
输入一个整数n,n>0,表示到第n天剩下1个桃子。
输出格式:
一个整数,表示第1天摘的桃子数。
输入样例:
10
输出样例:
1534
时间限制:2000ms内存限制:32000kb
#include <iostream>
using namespace std;
int n;
int f(int i)//写了一个递归函数
{
if(i==n)//知道第n天的桃子
return 1;
return 2*(f(i+1)+1);
}
int main()
{
cin>>n;
cout<<f(1)<<endl;
return 0;
}
//这道题要先找到那个递推关系,也可以求通项公式
3-4 搬砖问题(20分)
题目内容:
现有n块砖,要由n人一次搬完,假定男人一次可以搬4块,女人一次可以搬3块,两个小孩搬1块,计算这n人中男人、女人和小孩的人数。输入人数和砖数n,输出可能的解决方案。
程序运行结果如下:
50
men0
women10
children40
men5
women3
children42
如果没有满足的情况,显示提示信息“no result!”
程序运行结果如下:
1
no result!
输入格式:
表示人数的整型数
输出格式:
所有满足条件的男人、女人和孩子的人数或者提示信息“no result!”
输出格式见样例。有多组方案时,按男人数量从少到多的顺序输出。男人数量相同时,女人数量从少到多。
输入样例:
50
输出样例:
men0
women10
children40
men5
women3
children42
时间限制:2000ms内存限制:32000kb
#include <iostream>
using namespace std;
int main()
{
int i, j, sign=0;
int n;
cin>>n;
for(i=0; i<=n; i++)
for(j=0; j<=n; j++)
{
if((n-i-j)%2)
continue;
if(4*i+3*j+(n-i-j)/2==n)
{
cout<<"men"<<i<<endl;
cout<<"women"<<j<<endl;
cout<<"children"<<n-i-j<<endl;
sign = 1;
}
}
if(sign==0)
cout<<"no result!"<<endl;
return 0;
}
//这是类似与百钱百鸡的问题,暴力枚举即可
3-5 美分找钱(20分)
题目内容:
将n美分转换成25、10、5和1美分的硬币总共有多少种转换方法?
运行结果如下:
25
13
如果n不在0~99之间,输出提示信息“the money is invalid!”
运行结果如下:
101
the money is invalid!
输入格式:
整数,表示美分数
输入可能不是[0,99]之间的整数。输入不在该区间时,输出为“the money is invalid!”。
输出格式:
转换方法数或者提示信息“the money is invalid!”(不带引号啊,单词间只有一个空格)
输入样例:
25
输出样例:
13
时间限制:2000ms内存限制:64000kb
#include <iostream>
using namespace std;
int main()
{
int cent;
cin>>cent;
if(cent<0||cent>100)
cout<<"the money is invalid!"<<endl;
else{
int cnt=0;
for(int i=0; i<=cent/25; i++)
for(int j=0; j<=cent/10; j++)
for(int k=0; k<=cent/5; k++)
for(int l=0; l<=cent; l++)
if(i*25+j*10+k*5+l==cent)
cnt++;
cout<<cnt<<endl;
}
return 0;
}
//这也是枚举问题,这种题要确定好变量变化的范围