PTA 沙漏

#include <stdio.h>

int main()
{
	int num, i, j, k , top, bottom, sum,rest;
	k = sum = 1;
	
	char c = '*';
	scanf("%d %c", &num, &c);
	if(num == 1)
	printf("%c\n0", c); //把 一个符号情况独立出来
	else{
	
	for(i=3;k < num;i+=2)
	{
		k = sum;
		k = k + 2*i; // 符号是从一个开始,每行多两个
		if(k<num)	
		sum += 2*i; //用k来测试sum到底该不该加2*i
	 } 
	 i = i - 4;//在k+2*i>num的时候,k是<num的,所以合适的i值需要-4
	 top = i;
	 rest = num - sum;
	 while( top != 1 )
	 {
	 	for(k=(i-top)/2;k!=0;k--)
	 	printf(" ");//打印空格
	 	for( j = top;j>0;j--)
	 	{
		 	printf("%c", c);//打印符号
	 	}
	 	printf("\n");
		 top-=2;
	 }
	 bottom = 1;
	 while( bottom <= i   )
	 {
	 	for(k=(i-bottom)/2;k!=0;k--)
	 	printf(" ");
	 	for( j = bottom;j>0;j--)
	 	printf("%c", c);
	 	printf("\n");
	 	bottom+=2;
	 }
	 printf("%d",rest);
} 
	return 0;
 } 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值