C++算法竞赛篇(二)八道基础题带你玩转C++输入输出题型
·
C++算法竞赛篇(二)八道基础题带你玩转C++输入输出题型
前言
- 在前面的内容中,我们一同学习了 C++ 的十道基础题型,这些题型为大家筑牢了 C++ 编程的根基,让我们对 C++ 的基本语法和简单逻辑运用有了初步的认识
- 接下来我们开始讲解C++输入输出题型
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的C++算法竞赛篇文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13001405.html?spm=1001.2014.3001.5482
C++输入输出题型
第一题 浮点除法

- 关键问题:整数除法会自动舍弃小数部分(如5/2=2),需先将整数转为浮点数再计算。
- 解决方法:通过a*1.0(或(double)a)将整数转为浮点数,再除以b,得到带小数的商。
- 输出格式:要求保留 3 位小数,用printf(“%.3f”, 结果)格式化输出(%.3f表示保留 3 位小数的浮点数)
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
int a,b ;
cin >> a >> b;
float c= a*1.0/b;
printf ("%.3f",c);
return 0;
}

第二题 B2012 甲流疫情死亡率

题目核心:输入确诊数和死亡数,计算死亡率(死亡数/确诊数×100%,保留3位小数,带百分号)。
做题思路:
- 输入处理:用
cin读取确诊数a和死亡数b。 - 死亡率计算:公式为
(b * 100.0) / a(乘以100转为百分比,100.0确保浮点数计算)。 - 输出格式:
- 需保留3位小数:用
%.3f控制。 - 需带百分号
%:printf中%是特殊字符,用%%表示输出一个%,因此格式为"%.3f%%"。
- 需保留3位小数:用
#include <iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
printf("%.3f%%\n", b * 100.0 / a);
}

第三题 B2013 温度表达转化

题目核心:输入华氏温度f,转换为摄氏温度c(公式:c=5*(f-32)/9,保留5位小数)。
做题思路:
- 输入处理:华氏温度可能为小数,用
double类型存储f,通过cin读取。 - 公式应用:严格按照
c=5*(f-32)/9计算,注意运算顺序(先算括号内的f-32)。 - 输出格式:要求保留5位小数,用
printf("%.5f", c)输出(%.5f表示保留5位小数)。
#include <iostream>
using namespace std;
int main() {
double f;
cin >> f;
double c = 5 * (f - 32) / 9;
printf("%.5f\n", c);
}

第四题 B2014 与圆相关的计算

题目核心:输入半径r,计算直径、周长、面积(均保留4位小数)。
做题思路:
- 输入处理:半径可能为小数,用
double类型存储r。 - 公式推导:
- 直径 =
2*r(圆的直径是半径的2倍)。 - 周长 =
2*π*r(圆周率π取3.14159,题目隐含要求)。 - 面积 =
π*r*r(圆面积公式)。
- 直径 =
- 输出格式:三个结果需依次输出,每个保留4位小数,用
printf("%.4f %.4f %.4f", 直径, 周长, 面积)(多个%.4f依次对应三个结果)。
#include <iostream>
using namespace std;
#define p 3.14159
int main() {
double r;
cin >> r;
double l = r * 2;
printf("%.4f ",l);
double ll = 2 * p * r;
printf("%.4f ", ll);
double c = p * r * r;
printf("%.4f", c);
}

第五题 B2004 对齐输出

题目核心:输入三个整数,每个数占8个字符宽度,右对齐输出。
做题思路:
- 输入处理:用
cin读取三个整数a、b、c。 - 对齐要求:
%8d是C语言格式化输出的关键——%d表示输出整数,8表示占8个字符宽度,默认右对齐(若数字长度不足8位,左侧补空格)。 - 输出格式:直接用
printf("%8d %8d %8d", a, b, c),三个数之间用空格分隔,每个占8位。
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
printf("%8d %8d %8d ", a, b, c);
}

第六题 糖果游戏

做题思路:
- 规则理解:每个小朋友依次将自己的糖果平分为5份,自己留1份,其余4份分给另外4人(如第一个小朋友分完后,自己保留
a/5,另外4人各加a/5)。 - 步骤分解:
- 按顺序处理5个小朋友:先处理第1个,再第2个,直到第5个。
- 每次处理时,先计算当前小朋友要分的数量(
当前糖果数 / 5,整数除法,舍弃余数),再更新自己和其他4人的糖果数。
- 输出格式:每个结果占5位,用
printf("%5d%5d%5d%5d%5d", a,b,c,d,e)(%5d表示占5位,右对齐)。
#include <iostream>
using namespace std;
int main() {
int a, b, c,d,e;
cin >> a >> b >> c >> d >> e;
a = a / 3, b = b + a, e = e + a;
b = b / 3, a = a + b, c = c + b;
c /= 3, b += c, d += c;
d /= 3, c += d, e += d;
e /= 3, d += e, a += e;
printf("%5d%5d%5d%5d%5d", a, b, c, d, e);
}

第七题 数字反转

题目核心:输入一个5位整数,输出反转后的数(如输入12345,输出54321)。
做题思路:
- 输入特性:题目明确是“5位整数”,因此可直接按5个字符处理(无需考虑位数不足的情况)。
- 反转逻辑:
- 方法1(字符处理):用
cin读取5个字符(如a,b,c,d,e),直接按e,d,c,b,a的顺序输出(最简单直接)。 - 方法2(数学处理):通过取余(
%10)和除法(/10)拆分每一位(如12345拆分为5,4,3,2,1),再组合输出。
- 方法1(字符处理):用
- 输出:直接反向输出拆分的字符或数字即可。
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char** argv) {
char a,b,c,d,e;
cin >>a >>b>>c>>d>>e;
cout <<e<<d<<c<<b<<a;
return 0;
}

第八题 三角形面积

题目核心:输入三角形三边长,用海伦公式计算面积(保留1位小数)。
做题思路:
- 输入处理:三边长可能为小数,用
double类型存储a,b,c。 - 海伦公式应用:
- 先算半周长
p = (a + b + c) / 2。 - 面积
area = sqrt(p*(p-a)*(p-b)*(p-c))(sqrt是开平方函数,需包含头文件#include <cmath>)。
- 先算半周长
- 输出格式:要求保留1位小数,用
printf("%.1f", area)输出。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a, b, c;
cin >> a >> b >> c;
double p = (a + b + c) / 2;
double sum = sqrt(p * (p - a) * (p - b) * (p - c));
printf("%.1f", sum);
}

以上就是这篇博客的全部内容,下一篇我们将继续探索C++算法的更多精彩内容。
我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的C++算法竞赛篇文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_13001405.html?spm=1001.2014.3001.5482
| 非常感谢您的阅读,喜欢的话记得三连哦 |

更多推荐



所有评论(0)