2020级C++实验课-期末机考模拟考题解

做这个题解的理由很简单,有很多同学想写但是不会写,凑巧我写了,所以搞个题解。

顺序就是题单里的顺序(界面左上角菜单切换文章,右上角目录方便查看)

 


 

1:黑马白马

题意:

随机得到一个数字,如果是偶数,则输出“黑马”,并得到一颗糖,然后继续;不然则输出“白马”,没有得到糖,并且换人。

题解:

判断一个数是不是偶数(能否被2整除)即可。

上板子:

if (n == 0)continue;
else if (n % 2 == 0)cout << "Black Horse!";
else cout << "White Horse, Bye!" << endl;

 

2:星号列阵-右三角

题意:

根据输入的数字,画出相对应的靠右的三角形。

题解:

其实就是输出了一个n*n的图,判断一下该不该输出 * 就行,注意行末换行。

上板子:

for (int i = 1;i <= n;i++)
{
    for (int j = 1;j <= n;j++)
    {
        if (j > n - i)cout << '*';
        else cout << " ";
    }
    cout << endl;
}

 

3:水仙花数

题意:

一个(三位)水仙花数是指一个三位数,其数字本身正好等于其个位数,十位数,及百位数的次方之和。请问这样的数有多少?

上板子:

void fi(int a)//输入一个数 a,判断它是不是水仙花数(该函数仅限于三位水仙花数)
{
    int b, c, d;
    b = a % 10;
    c = (a / 10) % 10;
    d = a / 100;
    if (a == (b * b * b + c * c * c + d * d * d))
        cout <<" "<< a;
    else return ;
}

 

4:只要大写字母

题意:

输入一个字符串,输出该字符串,但只要字母,并且把所有的字母都换成大写。

题解:

输入字符串,然后一位位判断(小写与大写字母的ASCII码差32),如果是小写,就减32就好了。

由于是含空格的字符串,所以要用getline输入。

上板子:

getline(cin, s);
for (int i = 0;i < s.length();i++)
{
    if (s[i] >= 'a' && s[i] <= 'z')
    {
        s[i] -= 32;
        cout << s[i];
    }
    else if (s[i] >= 'A' && s[i] <= 'Z')
        cout << s[i];
}
cout << endl;

 

5:三哥的行列

题意:

输出每群人年纪第三大的(按照从小到大排序)

题解:

把每组数第三大的数(通过排序)存入一个数组,然后再排序后输出。

这么明白了,怎么可能再给你复制粘贴


 

 

6:三的倍数或平方

题意:

判断一个整数是否是3的倍数。如果是3的倍数,则输出其平方;如果不是,则输出其3倍。

题解:

就是题意,没有题解(狗头)


 

7:素数的和

题意:

输入2个正整数m,n,输出第m个起的n个素数的和。

题解:

暂时没有想到常规的方法,先空着。


 

8:变量名解析

题意:

输入1个字符串,把所有合法的变量名都解析出来。

题解:

判断合法字符串自己看题目,同时也是一个考点。我这里讲的主要是如何做到符合题意地输出//我因为不合题意错了7次

你需要判断需不需要空格,需不需要换行。

我最后是把所有符合题意的存入一个数组,然后输出。

上板子:

for (int i = 0;i < cnt;i++)
{
    cout << sh[i];
    if (i != cnt-1)cout << " ";
}
cout << endl;

 

9:排序&比较

题意:

输入2个数列,分别排序后,输出其各位数字较大的一个。

题解:

输入数组,分别排序,然后用一个循环输出较大的就行了。


 

10:矩阵的酒窝

题意:

矩阵上的一个点谓之“酒窝”若它比四周的点都小。一个位于边缘的点可以忽略没有“邻居”的那一边。同理,位于4个角的点可以忽略没有“邻居”的那两边。然后输出某个数组“酒窝”的个数。

题解:

二维动态数组

上板子:

int m, n,num=0;
cin >> m >> n;
int** p = new int* [m];
for (int i = 0;i < m;i++)
    p[i] = new int[n];
for (int i = 0; i < m; i++)
{
    for (int j = 0; j < n; j++)
    {
        cin >> p[i][j];
    }
}
for (int i = 0; i < m; i++)
{
    if(i==0)
        for (int j = 0; j < n; j++)
        {
            if (j == 0)
            {
                if (p[i][j + 1] > p[i][j] && p[i + 1][j] > p[i][j])
                    num++;
            }
            else if (j == n - 1)
            {
                if (p[i][j - 1] > p[i][j] && p[i + 1][j] > p[i][j])
                    num++;
            }
            else
            {
                if (p[i][j + 1] > p[i][j] && p[i][j - 1] > p[i][j] && p[i + 1][j] > p[i][j])
                    num++;
            }
        }
    else if (i == m-1)
        for (int j = 0; j < n; j++)
        {
            if (j == 0)
            {
                if (p[i][j + 1] > p[i][j] && p[i - 1][j] > p[i][j])
                    num++;
            }
            else if (j == n - 1)
            {
                if (p[i][j - 1] > p[i][j] && p[i - 1][j] > p[i][j])
                    num++;
            }
            else
            {
                if (p[i][j + 1] > p[i][j] && p[i][j - 1] > p[i][j] && p[i - 1][j] > p[i][j])
                    num++;
            }
        }
    else
        for (int j = 0; j < n; j++)
        {
            if (j == 0)
            {
                if (p[i][j + 1] > p[i][j] && p[i - 1][j] > p[i][j] && p[i + 1][j] > p[i][j])
                    num++;
            }
            else if (j == n - 1)
            {
                if (p[i][j - 1] > p[i][j] && p[i - 1][j] > p[i][j] && p[i + 1][j] > p[i][j])
                    num++;
            }
            else
            {
                if (p[i][j + 1] > p[i][j] && p[i][j - 1] > p[i][j] && p[i - 1][j] > p[i][j] && p[i + 1][j] > p[i][j])
                    num++;
            }
        }
}
cout << num << endl;
for (int i = 0; i < m; i++)
    delete[]p[i];
delete[]p;

 

以上就是本次有点水的题解的全部内容了,不会的可以来问我  // 不一定能马上回

制作:BDT20040

 

posted @ 2020-12-29 18:38  流白李  阅读(306)  评论(0编辑  收藏  举报