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

posted @ 2021-02-24 15:01  流白李  阅读(292)  评论(0编辑  收藏  举报