打印沙漏


題目 打印沙漏

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印

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

所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減到1,再從小到大順序遞增;首尾符號數相等。

給定任意N個符號,不一定能正好組成一個沙漏。要求打印出的沙漏能用掉盡可能多的符號。

輸入格式:

輸入在一行給出1個正整數N(≤1000)和一個符號,中間以空格分隔。

輸出格式:

首先打印出由給定符號組成的最大的沙漏形狀,最后在一行中輸出剩下沒用掉的符號數。

輸入樣例:

19 *

輸出樣例:

*****
 ***
  *
 ***
*****
2

思路

分成兩部分進行打印,將沙漏看做上三角和下三角,計算出總行數與單個三角形的行數,再用等差數列進行計算整個沙漏所需要的字符數

代碼


#include<stdio.h>
#include<math.h>
int main()
{
  int i=1,j,x,n,sum=0,k;
  char op;
  scanf("%d %c",&n,&op);
  
  x=sqrt((n+1)/2); 
  
  while(sum<=n){
  	
    sum=2*i*i;
 
	i++;
   
  }
  
  
  for(i=x;i>0;i--){
    
    for(j=i;j<x;j++){
      printf(" ");
      
    }
    
    for(k=1;k<=2*i-1;k++){
      
      printf("%c",op);
      
    }
    
    printf("\n");
    
  }
  
  for(i=2;i<=x;i++){
    
    for(j=1;j<=x-i;j++){
      
      printf(" ");
      
    }
    for(k=1;k<=2*i-1;k++){
      
      printf("%c",op);
      
    }
    
    printf("\n");
    
    }
      sum=n-(2*x*x-1);
  

  printf("%d\n",sum);
  return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM