第三周编程作业

3-1 打印3个相邻字母(20分)

题目内容:

当用户输入一个英文字母后,程序能够按照字母表的顺序打印出3个相邻的字母,其中用户输入的字母在中间。

程序运行结果如下:

d

cde

这里假设字母表首尾两个字母是相连的。若输入字母Z,则程序输出YZA。

输入格式:

一个字母字符,可能为大写,也可能为小写。

输出格式:

连续3个字符,大小写不变。

输入样例:

扫描二维码关注公众号,回复: 10844883 查看本文章

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;
}
//这也是枚举问题,这种题要确定好变量变化的范围
发布了28 篇原创文章 · 获赞 38 · 访问量 7181

猜你喜欢

转载自blog.csdn.net/weixin_45543556/article/details/104884388