PAT打印沙漏

来源:互联网 发布:怕错过了也不会知 编辑:程序博客网 时间:2024/06/02 13:22

打印沙漏

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

***** ***  * ********

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

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

输出格式:

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

输入样例:
19 *
输出样例:
***** ***  * ********

2

就是控制格式输出的问题。思路要清晰。

#include<stdio.h>#include<string.h>#include<iostream>using namespace std;int main(){    int a;    char b;    int t[1005];    int s=1,n,i=1,j;    memset(t,0,sizeof(t));    t[1]=1;    for(i=2; s<1005; i++)    {        s+=2*(2*i-1);        t[s]=1;    }    while(cin>>a>>b)    {       for(i=a; i>=1; i--)            if(t[i]==1)            {                n=i;                break;            }        int k=0;        for(i=1;i<=n;i++)            if(t[i]==1)             k++;        for(i=1;i<=k;i++)        {            for(j=0;j<i-1;j++)                cout<<" ";            for(j=1;j<=(k-i)*2+1;j++)                cout<<b;            cout<<endl;        }        for(i=2;i<=k;i++)        {            for(j=1;j<=k-i;j++)                cout<<" ";            for(j=1;j<=2*i-1;j++)                cout<<b;            cout<<endl;        }        cout<<a-n<<endl;    }    return 0;}

0 0
原创粉丝点击