团体程序设计天梯赛-练习集 L1-002 打印沙漏 C语言

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

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

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

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

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    
    
    int a; //a为符号个数,
    char b;  //b为符号的样式
    int t;
    int sum=0;
    scanf("%d %c",&a,&b);  
    t=a-1;
    while(a>1000)
    {
    
    
        scanf("%d %c",&a,&b);  //输入
    }
        for(int e=2;;e++)
        {
    
    
           t-=2*(2*e-1);  
           if(t>=0)
           {
    
    
           sum++;  //求一半行数
           }
	if(a==1)	//设置边界,一开始错在这,没发现,还是老师和我说的
	{
    
    
   	 printf("%c\n",b);
  	 printf("%d\n",a-1);
   	 return 0;
	}
     if(t<0)
    {
    
    
      t+=2*(2*e-1);	//返回上一个值
      break;
     }
      else if(t==0)
     {
    
    
      break;
      }
     }
int i,j,p;
    for (i=-sum;i<=sum;i++)  //标准沙漏打法
    {
    
    
        for(p=abs(abs(i)-sum);p>=1;p--) //输出空格
        {
    
    
            printf(" ");
        }
        for (j=abs(abs(i)*2+1);j>0;j--) //输出符号
        {
    
    
            printf("%c",b);
        }
        printf("\n");
    }
    if(t!=0)	//剩下没用掉的符号数,这个if可有可无吧
    {
    
    
        printf("%d\n",t);
    }
    return 0;
}

赶作业了,我太难了.(T-T)

猜你喜欢

转载自blog.csdn.net/qq_49868778/article/details/110404425
今日推荐