题目1.打印沙漏

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

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

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

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

1.代码#include<stdio.h>
 
int n;
char a;
int l; //记录最长的一行有多少个符号
int sum=1;
int rest;
int space;
int icon;
int s;
int i;
 
int  main()
{
 scanf("%d %c",&n,&a);
 if(n<5){
  rest=n-1;
  printf("%c\n%d",a,rest);
  return 0;
 }
 for(l=3;sum<=n;l+=2){  //测试余数为0的情况,此处sum<=n而不是sum<n
  sum+=2*l;
 }
 l-=4;
 rest=n-sum+l*2+4; //剩余的符号数
 for(icon=l;icon>=1;icon-=2){
  space=(l-icon)/2;
  for(s=space;s>0;s--){
   printf(" ");
  }
  for(i=icon;i>0;i--){
   printf("%c",a);
  }
  printf("\n");
 }
 for(icon=3;icon<=l;icon+=2){
  space=(l-icon)/2;
  for(s=space;s>0;s--){
   printf(" ");
  }
  for(i=icon;i>0;i--){
   printf("%c",a);
  }
  printf("\n");
 }
 printf("%d",rest);
 
}

2运行截图

3.设计思路

 

posted on 2019-02-20 10:55  Jennie丶  阅读(117)  评论(0编辑  收藏  举报