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)的使用方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM