代码改变世界

打印沙漏

2019-02-20 11:03  氖几  阅读(116)  评论(0编辑  收藏  举报

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定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.设计思路  这到题目很难,不会,