2020级cpp上机考试题解#B卷
A卷的第七题我只会一个个排除的方法
意思就是暂时没有好办法所以A卷不搞了
1:递归函数求数列
题意:
有一个递归函数int f(int m),计算结果代表了数列的第m项。当m等于1时,函数结果返回1;当m等于2时,函数结果返回3;当m大于2时,函数结果返回3*f(m-1)+2*f(m-2)。请在主函数中输入正整数m,然后调用f函数求数列第m项,最后在主函数中输出。
题解:
题目中给定了m的范围(m<18)所以大家都可以大胆按照题意用递归不怕超时。记得每个输出后都要换行。
上板子:
int f(int m) { if (m == 1)return 1; else if (m == 2)return 3; else if (m > 2)return 3 * f(m - 1) + 2 * f(m - 2); else return 0; } int main() { int n; cin >> n; while (n--) { int m; cin >> m; cout << f(m) << endl; } return 0; }
2:两点之间的距离
题解:
平方用n*n,开方用sqrt()。
3:输出数字II
题意:
输出从a到1的所有数字
题解:
输出从a到1的所有数字,数字之间不要留空格。不要换行。且a是正整数,不用分类讨论考虑a为负数的情况。
上板子:
int main() { int n; cin >> n; for (int i = n;i >= 1;i--) { cout << i; } return 0; }
4:奇数偶数
题意:
根据一个整数的奇偶性,输出对应的结果。如果n是奇数,那么输出Odd;如果n是偶数,那么输出Even。
题解:
用到被2整除取余的思路。偶数余数为0,(奇数余数为1?)所以用到 % 2 == 0 这样一个简单的判断就好了。
这里注意一个点!由于不排除n是负数的可能性,所以不要用 % 2 == 1 来判断奇数,用 else 就行了。
5:星座
题意:
已知12星座的时间范围,输入一个日期,输出该日期对应的星座英文名。
题解:
先判断月份后判断日,或者两个一起判断,这里就不多做解释了。
6:背包客
题意:
小倩学姐喜欢背包旅游,她有一个标准的可随身携带的背包。一个物品需要符合下列规则才可以装入背包:1)尺寸小于等于20*20*20cm(即长、宽、高都不能大于20cm);2)并且重量不超过7kg。请输入4个正整数a,b,c和w,分别代表当前物品的长、宽、高和重量,然后判断是否能装入背包。如果能装入,则输出“Yes”,否则输出“No”。
题解:
一个 if 搞定的事情:
if (a > 20 || b > 20 || c > 20 || d > 7)
cout << "No"<<endl;
else cout << "Yes"<<endl;
或者用&&,自己随意。
7:整型数组
题意:
定义一个长度为100的整型数组,前50个元素分别赋值为1、3、5、7、...、99,后50个元素通过键盘输入。然后把数组各个元素从后到前依次输出。每两个元素之间有一个空格。最后一个元素后面不要有空格,不要换行。
上板子(这题不知道怎么搞题解):
int main() { int a[101] = { 0 }; for (int i = 1;i <= 50;i++)//前50个数,按照题目给定的规律 { a[i] = 2 * i - 1; } for (int i = 51;i <= 100;i++) { cin >> a[i];//依次输入后50个数 } for (int i = 100;i >= 1;i--) { cout << a[i]; if (i != 1)cout << " ";//判断是否应输出“ ” } return 0; }
8:最大的两个数的和
题意:
按照指定的公式生成m个整数,输出其中最大的两个数的和。
题解:
很明显,难度在于这个看起来很离谱的数值范围,他让我看起来就像是一道注定会一直黄色的题目。
我一开始尝试使用数组去做这题,试了很多遍,就没成功过
第二次用的函数去写,还是错了(后来发现是内容写错了不是使用函数的原因)
最后的版本看起来其实不难也不复杂,不过要是能一上来就想到那也是厉害了
有兴趣的人可以把这串代码改成函数形式,看看能不能通过hhh
上板子:
long long int num1 = 1, num2; cin >> m >> a >> b >> c; long long int m1 = 1, m2 = 0;//两个最大值,由于已给一个d[1]=1,所以 m1 初始值赋为1 for (int i = 2;i <= m;i++) { num2 = (num1 * a + b) % c;//题目所给的公式 if (num2 > m2) { m2 = num2; if (m2 > m1) { swap(m1, m2);//按照我的运算,m2 <= m1 } } num1 = num2; }
9:字符串变换
题意:
把一个字符串中的所有大写字符按照以下规则进行变换:把A变成Z,B变成Y,C变成X,...,X变成C,Y变成B,Z变成A。字符串中的其它字符不要变换。
题解:
题目告诉你了字符串不含空格,所以放心用 cin 跟 string 。
至于转换方式我是没什么新意,就提供几个小思路。
1)暴力方法1:if(s[i]=='A')s[i]='Z'; //这个方法不用脑子,我觉得特别适合我这样宁可多打几个字也不去想别的方法的人
2)暴力方法2:switch 具体参考暴力1. //也可以建一个数组包含所有大写字母,可能会方便一点点
3)转换为ASCII码后取对称,然后再转回去
10:尚可过否
题意:
写一个程序判断同学们的成绩。程序的运算方式为:每次输入四个数字a,b,c,d,分别代表一个学生的出勤分数、平时分数、期中分数和期末分数。输入完后,程序计算该生的总评成绩,公式为:总评成绩=a+b+c*0.3+d*0.5。最后总评成绩如果大于等于60分,则输出“Pass”,否则输出“Fail”。
题解:
题目开头可以直接忽略,只看最后两句话就行。
具体操作也不难,计算并判断总评成绩与60分的关系就行。
以上就是本文的全部内容了,祝各位下学期顺顺利利。
制作:BDT20040