20250224-Rain

1. 运算符

/*
1. 
设计一个程序, 输入整数l, 求边长为l的正方形面积, 比直径为l的圆形面积大多少.
(0<l<1000, PI取3.14, 输出结果保留两位小数)
*/

#include <iostream>
#include <ios>
#include <iomanip>
// #include <stdio>
#define PI 3.14

using namespace std;

int main(void)
{
    int l;
    cout << "please input l: " << endl;
    cin >> l;

    // 圆面积公式:S = PI * R * R
    double circle = PI * (l / 2.0) * (l / 2.0);     // 通过 '/' 运算将 l 进行类型转换
    double square = l * l;                          // 整数 l 计算的正方形面积仍为 整数
    double diff = square - circle;

    /*
    1.
    cout 格式化输出
        fixed: 设定模式
               保留小数点后位数
               头文件 #include <ios>

        setprecision(2): 指定保留小数点后 2 位数字 
                         如果没有 fixed,则为设定保留 2 位有效数字
                         头文件 #include <iomanip>
    保留两位小数,此处为 四舍五入
    */
    cout << fixed << setprecision(2) << diff << endl;

    /*
    2.
    printf 格式化输出
        %__f:   指定输出变量以 float 精度输出
        .2:     指定保留小数点后 2 位数字
        头文件 #include <stdio>
    */
    // printf("%.2f", diff);
    return 0;
} 

2. 循环

草稿运算可以发现规律为

基数 base(n)
当前项 x(n)
总和 S(n)

base(0) = 1

x(0) = base(0)*a = 2

S(0) = x(0) = 2

base(1) = 10 + base(0) = 11

x(1) = base(1)*a = 22

S(1) = S(0) + x(1) = 2 + 22

base(2) = 100 + base(1) = 111

x(2) = base(2)*a = 222

S(2) = S(1) + x(2) = 2 + 22 + 222

...

...

...

base(n) = pow(10, n) + base(n-1)

x(n) = base(n)*a

S(n) = S(n-1) + x(n)

其中 pow(x, y) 幂函数,表示 x^y

根据题意可以进行编码。

/*
2.
张三上课时走神, 在作业上写了很多222222222222222 结果被老师发现了
张三连忙掩饰说自己在算2+22+222+2222+22222的和, 
老师很欣慰, 问他算出来没有
张三很困扰, 因为草稿纸写满了2  已经不够用了
大家快帮帮张三吧
设计一个程序, 输入n和a 求Sn
 Sn = a + aa + aaa + … + aaaaa(n个a)
*/

#include <iostream>
#include <cmath>

using namespace std;

int main(void)
{
    int n;          // 项的 数量
    int a;          // 项的 变量值
    int sn = 0;     // 最终 加和结果,需要初始化
    int base = pow(10, 0);   // 项的 基数,需要初始化

    cout << "Please input 'n' 'a'(space to separate): " << endl;
    cin >> n >> a;
    for(int i = 0; i < n; i++)
    {
        // 每一项可以表示为 基数 * 变量值
        sn = sn + base * a;
        // 更新基数
        base = pow(10, i+1) + base;
    }
    cout << "Sn = " << sn << endl;
    return 0;
}

为了避免 pow() 函数在 n 较大时,造成额外的大量内存开销,也可以使用下面的方法来更新基数

#include <iostream>

using namespace std;

int main(void)
{
    int n;          // 项的 数量
    int a;          // 项的 变量值
    int sn = 0;     // 最终 加和结果,需要初始化
    int base = 1;   // 项的 基数

    cout << "Please input 'n' 'a'(space to separate): " << endl;
    cin >> n >> a;

    for (int i = 0; i < n; i++)
    {
        // 每一项可以表示为 基数 * 变量值
        sn = sn + base * a;

        // 更新基数:base = base * 10 + 1
        base = base * 10 + 1;
    }

    cout << "Sn = " << sn << endl;
    return 0;
}

3. 判断

/*
3.
东东哥上班
东东哥在上班途中, 可以选择走路和骑车两种方式
但他不清楚哪种方式比较快, 因为骑车需要找车, 开锁, 停车 需要耽搁很多时间.
设找到自行车, 开锁, 骑上自行车需要花27秒, 停车需要花23秒
步行每秒1.2米, 骑车每秒3.0米
给出东东哥距离公司的距离, 请问是骑车快还是走路快.
输入一个整数n, 表示到公司的距离
如果骑车快, 输出"骑车"
如果走路快, 输出"走路"
如果一样快, 输出"一样快"
*/

#include <iostream>

using namespace std;

int main(void)
{
    int n;
    // 步行相关变量
    double walk;
    double walk_speed = 1.2;
    // 骑车相关变量
    double bike;
    double bike_speed = 3.0;
    int bike_additional_time = 27 + 23;

    cout << "Please input the distance 'n': " << endl;
    cin >> n;

    // 分别计算耗时
    walk = n / walk_speed;
    bike = n / bike_speed + bike_additional_time;

    // 比较结果
    if(bike < walk)
    {
        cout << "bike";
    }
    else if(bike > walk)
    {
        cout << "walk";
    }
    else if(bike == walk)
    {
        cout << "same";
    }
    return 0;
}

Last updated