题目要求
为了参加学校的社团风采展,怡山小学数学组的同学们决定画一座圆周率山,以宣传圆周率。
已知圆周率为:3.
1415926535 8979323846 2643383279 5028841971 6939937510
5820974944 5923078164 0628620899 8628034825 3421170679
8214808651 3282306647 0938446095 5058223172 5359408128
4811174502 8410270193 8521105559 6446229489 5493038196
输入格式:
输入山的高度,为一个不超过10的正整数。
输出格式:
以上尖下宽,左右对称的三角形形式,给出圆周率的前若干位(不含小数点)。注意:每行均以数字结尾,即数字右边无空格。
输入样例1:
1
输出样例1:
3
输入样例2:
4
输出样例2:
3
141
59265
3589793
解题思路
首先输入一个整数n,然后将 π 的近似值存储为字符串 s。
使用循环来逐行输出三角形,其中 i 从0到 n-1 表示当前输出的是第几行(下标从0开始),flag变量用于记录已经输出的 π 中字符的数量(即前i行的字符数),s1变量表示当前行需要输出的 PI 的子串。
在每一行输出前,首先通过 substr() 函数截取 PI 的子串,单位长度为奇数,即每行的字符数为 1、3、5、7……。然后通过 setw() 函数设置输出宽度,其中参数为输出宽度(即空格数),确保每行输出的 PI 子串居中对齐。
代码
#include <iostream>
#include <string>
#define PI "314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196" // 定义 π 的近似值字符串为常量宏
int main() {
int n, x, i, j; // 声明整数类型变量
cin >> n; // 输入需要输出的等腰三角形的行数
string s(PI); // 将 π 的近似值字符串赋值给 s 变量
int flag = 0; // 定义变量 flag 表示已经输出的 π 中字符的数量(即前 i 行的字符数)
for (i = 0; i < n; i++) { // 循环输出等腰三角形的每一行,下标从 0 开始,到 n-1 结束
// 使用 substr() 函数截取 PI 的子串,具体截取长度为 i*2 + 1,表示第 i 行需要输出的字符数
string s1 = s.substr(flag, i*2+1);
// setw() 函数设置输出宽度,确保每行输出的 PI 字符串居中对齐
// 其中参数为输出宽度,即空格数,每行空格总数为 (n*2-1)/2+1+i
cout << setw((n*2-1)/2+1+i) << s1 << endl;
flag += i*2+1; // 计算已经输出的字符数量,注意是 +=,表示每一行需要计算累加
}
return 0; // 返回 0,程序结束
}
总结
该题考察字符串的使用(substr函数截取字符串)
、循环
等知识点,读者可躬身实践。
我是秋说,我们下次见。
标签:输出,2017Final,字符,圆周率,C++,每行,PTA,字符串,PI From: https://www.cnblogs.com/qiushuo/p/17481452.html