L1-002. 打印沙漏
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
***** *** * *** *****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:19 *输出样例:
***** *** * *** ***** 2
感觉自己写的办法好傻,太麻烦了
#include<stdio.h> int main() { int n; char a1[2]; scanf("%d",&n); scanf("%s",a1); int sum=0,p=0; int l; l=n-1; int we; int k; int ha=0; if(n<=6) { printf("%c\n",a1[0]); printf("%d\n",n-1); } else { for(int i=3;i<=n;i++) { if(i%2==1) { ha++; sum+=i; if(sum*2==l) { p=1; we=i; k=sum; break; } if(sum*2<l) { we=i; k=sum; } if(sum*2>l) { break; } } else { continue; } } for(int i=1;i<=we;i++) { printf("%c",a1[0]); } int haha=1; printf("\n"); for(int i=2;i<=(ha-1);i++) { for(int e=1;e<=haha;e++) printf(" "); for(int j=haha+1;j<=we-haha;j++) { printf("%c",a1[0]); } printf("\n"); haha+=1; } for(int i=we/2;i>=1;i--) printf(" "); printf("%c",a1[0]); printf("\n"); int haha1=we/2-1; for(int j=3;j<we;j+=2) { for(int e=haha1;e>=1;e--) printf(" "); for(int i=j;i>=1;i--) { printf("%c",a1[0]); } printf("\n"); haha1=haha1-1; } for(int i=we;i>=1;i--) { printf("%c",a1[0]); } printf("\n"); if(p==0) { int ni=l-k*2; printf("%d\n",ni); } else printf("0\n"); } }