20250223-Rain

1. 运算符

/*
1. 设计一个程序, 输入三位数a, 分别输出百,十,个位.
(0<a<1000)
*/

#include <iostream>
#include <cmath>

using namespace std;

int main(void)
{
    int a;      // a 储存一个三位数
    int num[3]; // num[] 分百 十 个位 存储三位数

    cout << "Please input 'a' (0 < a < 1000): ";
    cin >> a;

    if (a <= 0 || a >= 1000)
    {
        // 如若不符合题目范围:报错、退出程序
        cout << "Error! 'a' must be (0 < a < 1000)" << endl;
        return 0;
    }

    for (int i = 0; i < 3; i++)
    {
        num[i] = a / int(pow(10, (2 - i))); // 用 / 整除运算 分别取出百、十、个位:
        a = a % int(pow(10, (2 - i)));      // 用 % 取余运算 分别去除百、十、个位:
    }

    // 输出结果
    for (int i = 0; i < 3; i++)
    {
        cout << num[i] << endl;
    }

    return 0;
}

2. 判断

/*
2. 打分系统
在某次考试时, 学生的提交成绩惨不忍睹
云海学长为了让大家及格可谓煞费苦心, 他苦思三天三夜, 终于想出了一套打分方案:
正确数量在0~10时, 每题6分
正确数量在11~20时, 第11~20题, 每题2分
正确数量在21~40时, 第21~40题, 每题1分
但因为需要计分的作业太多了, 希望你能帮帮云海学长, 实现该计分程序.
输入做对的题目数量n, 输出得分.
(0<=n<=40)
*/

#include <iostream>

using namespace std;

int main(void)
{
    int n;         // n 存储题目数量
    int score = 0; // score 存储总得分

    cout << "Please input 'n' (0 <= n <= 40): ";
    cin >> n;

    if (n < 0 || n > 40)
    {
        // 如若不符合题目范围:报错、退出程序
        cout << "Error! 'n' must be (0 <= n <= 40)" << endl;
        return 0;
    }

    // 判断条件并进行运算,这里可以去除左边界,不影响判断。
    if (n >= 0 && n <= 10)
    {
        score = 6 * n;
    }
    else if (n >= 11 && n <= 20)
    {
        score = 6 * 10 + (n - 10) * 2;
    }
    else if (n >= 21 && n <= 40)
    {
        score = 6 * 10 + 10 * 2 + (n - 20) * 1;
    }

    // cout << "Number of correct: "<< n << '\n' << "The score you got: " << score;
    cout << "The score you got: " << score;
    return 0;
}

3. 简单循环

简单的动态规划,草稿演算不难推出状态转移公式:fib(n) = fib(n-1) + fib(n-2)

依题意编码即可

  • 时间复杂度为O(n)

  • 空间复杂度却决于对于状态的保存用数组(O(n))还是普通变量(O(1)

  • 推荐一道同类题 LeetCode 70. - 简单

/*
3. 斐波那契数列: super家养了一对刚出生的兔子, 兔子出生第3月开始每月都会生一对小兔子, 小兔子出
生后同样第3月开始也会每月生一对兔子
super想知道 如果兔子不死 n月后家里会有多少对兔子
设计一个程序: 输入n, 输出兔子数量
(2<n<30)
*/

#include <iostream>

using namespace std;

int main(void)
{
    int n;
    cout << "Please input 'n' (2 < n < 30): ";
    cin >> n;

    if (n <= 2 || n >= 30)
    {
        // 如若不符合题目范围:报错、退出程序
        cout << "Error! 'n' must be (2 < n < 30)" << endl;
        return 0;
    }

    // 只需要保存前两个状态量,而不是数组
    // 这样可以把空间复杂度降为O(1)
    int pre0 = 1;
    int pre1 = 1;
    int cur = pre0 + pre1;
    for (int i = 3; i <= n; i++)
    {
        cur = pre0 + pre1;
        pre0 = pre1;
        pre1 = cur;
    }
    cout << "The number of rabbits: " << cur << endl;
    return 0;
}

Last updated