【PAT Basic Level】1027 打印沙漏

    技术2022-07-16  82

    目录

    题目分析代码 专栏:PAT乙级刷题笔记

    题目

    本题要求你写个程序把给定的符号打印成沙漏的形状。 给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

    输入格式

    输入在一行给出1个正整数 N ( ≤ 1000 ) N(\leq1000) N(1000)和一个符号,中间以空格分隔。

    输出格式

    首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

    输入样例

    19 *

    输出样例

    ***** *** * *** ***** 2

    分析

    刚学C语言那会经常见到打印金字塔的题目,这个是个进阶版吧。。。。。

    代码

    #include<iostream> #include<math.h> using namespace std; int f(int n){ if(n == 1) return 1; else return f(n-1)+4*(n-1)+2; }//这是用来求第n个沙漏有多少符号的 int main(){ int a[24] = {0}; int i,j,k; for(i = 1;i < 25;++i) a[i] = f(i); int N;cin>>N; char c;cin>>c; for(i = 1;i < 23;++i) if(N >= a[i] && N < a[i+1]) break; for(j = i;j >= 1;--j){ for(k = i-j;k > 0;--k) cout<<" "; for(k = j*2-1;k > 0;--k) cout<<c; cout<<endl; } for(j = 2;j <= i;++j){ for(k = 1;k <= i-j;++k) cout<<" "; for(k = 1;k < j*2;++k) cout<<c; cout<<endl; } cout<<N-a[i]; }
    Processed: 0.013, SQL: 9