1. 程式人生 > 實用技巧 >2020級C++實驗課-期末機考模擬考題解

2020級C++實驗課-期末機考模擬考題解

做這個題解的理由很簡單,30號不想做這個題,有很多同學想寫但是不會寫,湊巧我寫了,所以搞個題解。

順序就是題單裡的順序(介面左上角選單切換文章,右上角目錄方便檢視)


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:水仙花數

題意:

一個(三位)水仙花數是指一個三位數,其數字本身正好等於其個位數,十位數,及百位數的

次方之和。請問這樣的數有多少?

題解:

其實就是輸出了一個n*n的圖,判斷一下該不該輸出 * 就行,注意行末換行。

上板子:

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