2017Final 圆周率山

为了参加学校的社团风采展,怡山小学数学组的同学们决定画一座圆周率山,以宣传圆周率。
已知圆周率为: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

 (摘自pintia.cn)

 

 

解答:

 1 #include<iostream>
 2 #include<string>
 3 #include<iomanip>
 4 #define PI "314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196"
 5 using namespace std;
 6 int main()
 7 {    
 8     string str(PI);            //初始化字符串
 9     int height,weight,mark(0);        //height为高度,weight为底层的宽度,mark用于记录截取字符串的位置
10     cin>>height;                    //输入高度
11     weight=height*2-1;                //计算底层宽度
12     string *p=new string[height];    //动态分配字符串组
13     for(int i(0);i<height;i++)        //将字符串分层,每层有2*i+1个字符
14     {
15         *(p+i)=str.substr(mark,i*2+1);        //sting.substr(unsigned int pos, unsigned int n) 从字符串sting的下标为pos的字符开始,截取n个字符
16         mark+=(i*2+1);
17     }
18     for(int i(0);i<height;i++)                //分层输出
19     {
20         cout<<setw(weight/2+i+1)<<setfill(' ')<<*(p+i)<<endl;        //每层占位wight/2+i+1个字符位,输出每层的字符串,其他的由空格填充
21     }
22     return 0;
23 }

解析:

  见代码注释。

  string.substr(unsigned int pos, unsigned int n)的使用方法。

转载于:https://www.cnblogs.com/wzzdeblog/p/10615716.html

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值