PTA B1027 列印沙漏
阿新 • • 發佈:2018-12-11
這道題感覺好難呀,看了答案一遍都做不出來><
注意:
1.根據公式計算得的x可能是偶數,這種情況下必須減1.
2.sqrt函式的引數必須是浮點數,因此要把係數2寫成2.0,或者在引數內部乘以0.1
3.向下取整可以直接使用int型強制轉換,也可以用math.h標頭檔案下的floor
#include<cstdio> #include<cmath> using namespace std; int main(){ int n; char c; scanf("%d %c",&n,&c); int bottom=(int)sqrt(2.0*(n+1))-1; if(bottom%2==0)bottom-=1; int use=(bottom+1)*(bottom+1)/2-1; for(int i=bottom;i>=1;i-=2){ //倒三角 for(int j=0;j<(bottom-i)/2;j++){ printf(" "); } for(int j=0;j<i;j++){ printf("%c",c); } printf("\n"); } for(int i=3;i<=bottom;i+=2){ for(int j=0;j<(bottom-i)/2;j++){ printf(" "); } for(int j=0;j<i;j++){ printf("%c",c); } printf("\n"); } printf("%d\n",n-use); return 0; }