首页 > 编程语言 >[C++/PTA] 2017Final 圆周率山

[C++/PTA] 2017Final 圆周率山

时间:2023-06-14 21:58:21浏览次数:40  
标签:输出 2017Final 字符 圆周率 C++ 每行 PTA 字符串 PI

题目要求

为了参加学校的社团风采展,怡山小学数学组的同学们决定画一座圆周率山,以宣传圆周率。

已知圆周率为: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

相关文章

  • [C++/PTA] 类的定义和使用
    题目要求定义一个日期类Date,内有数据成员年、月、日,另有成员函数:构造函数用于初始化数据成员,输出,闰年的判断。编写主函数:创建日期对象,计算并输出该日是该年的第几天。输入:每组测试数据仅包含一个测试用例,每个测试用例占一行包括三个数,分别表示年、月、日。输出:该日是该年的......
  • [C++/PTA] 立方体类的实现
    题目要求立方体类Box的实现,完成计算体积、计算表面积、输出结果等功能。其中给定的主函数为:intmain(){floatab;cin>>ab;Boxobj;obj.seta(ab);obj.getvolume();obj.getarea();obj.disp();return0;}输入格式:立方体的边......
  • [C++/PTA] 汽车收费
    题目要求现在要开发一个系统,管理对多种汽车的收费工作。给出下面的一个基类框架classVehicle{protected:stringNO;//编号public:virtualvoiddisplay()=0;//输出应收费用}以Vehicle为基类,构建出Car、Truck和Bus三个类。Car的收费公式为:载客数8+重量2Truck的收费......
  • [C语言/PTA] 学生成绩链表处理
    题目要求本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。函数接口定义:structstud_node*createlist();structstud_node*deletelist(structstud_node*head,intmin_score);函数createlist利用scanf从输入......
  • [C语言/PTA] 单链表结点删除
    题目要求本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:structListNode{intdata;ListNode*next;};函数接口定义:structListNode*readlist();structListNode*deletem(structListNode*L,intm);......
  • [C++/PTA] 计算时间相减
    题目要求题目描述:定义一个时间类,小时和分钟是其两个私有成员数据。输入一个起始时间和一个结束时间(起始时间早于结束时间),通过运算符重载-(减号),计算这两个时间相隔多少分钟。说明:这两个时间在同一天之内,且采用24小时计时分式,即从00:00-23:59。输入格式:测试输入包含若干测......
  • [C语言/PTA] 建立学生信息链表
    题目要求本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。函数接口定义:voidinput();该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表。链表节点结构定义如下:structstud_node{intnum;/*学号*/charnam......
  • [C++/PTA] 括号匹配
    题目要求给定仅包含()[]{}六种括号的字符串,请你判断该字符串中,括号的匹配是否是合法的,也就是对应括号的数量、嵌套顺序完全正确。输入格式:第一行一个整数T(T<=10)其后T行每行一个字符串只包含[{()}]六种字符(字符串长度2e5以内)输出格式:对于每个字符串,匹配输出Yes,否则输出No......
  • c++的常量折叠
    一,前言有关C++语言的const常量的考察点:肯定是const常量的内存不是分配在read-only的存储区的,const常量的内存分配区是很普通的栈或者全局区域。也就是说const常量只是编译器在编译的时候做检查,根本不存在什么read-only的区域。所以说C++的const常量和常量字符串是不同的,常量字符......
  • [C++/PTA] 办事大厅排队
    题目要求在郑州大学综合办事大厅,每天陆陆续续有很多人来排队办事。现在你能否写程序帮助老师时刻了解当前办理业务的情况。输入格式:第一行一个数字N,表示排队信息或者查询信息条目的数量。以下N行,每行的内容有以下3种情况(1)inname表示名字为name的人员新来到办事大厅,排在......