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