沙漏字符代码c语言,PTA测试题- 打印沙漏(C语言)

题目:

0dd2d58cc21f5dacce2468e50c132c82.png

第一次写这种东西,感觉写的超级麻烦,原本想用二维数组建立坐标系来做,结果发现好像更麻烦。。

上周用PHP做了一个,(传送门:https://www.mmuaa.com/post-25.html),两者思路有区别,PHP的那个对于输入"1 *"无法打印正确的结果(所以说有很多bug。。。)

C代码:

#include "stdio.h"

int used(int);

int line(int);

void out(int,char);

int main()

{

/*初始化变量*/

int n, remain, use, lin;

char str;

scanf("%d %c", &n, &str); /*str为组成沙漏的字符,n为个数*/

use = used(n); /*使用字符的个数*/

lin = line(use); /*使用的行数*/

out(lin, str); /*输出*/

printf("%d", n - use); /*输出没使用的个数*/

return 0;

}

int used(int n){

if (n == 1){

return 1;

}

int count = 1;

int line = 1;

while (count 

line++;

count += (2 * (2 * line - 1));

}

count -= (2 * (2 * line - 1));

return count;

}

int line(int n){

if (n == 1){

return 0;

}

int count = 1;

int line = 1;

while (count 

line++;

count += (2 * (2 * line - 1));

}

return line-1;

}

void out(int n,char str){

int count = 0; /*计算空格数*/

if (n == 0){ /*如果只有中心的一行的情况*/

printf("%c\n",str);

return;

}

for (int i = n; i != 0; i--){

for (int ii = 0; ii != count; ii++){

printf(" ");

}

for (int ii = 0; ii != (2 * i + 1); ii++){

printf("%c",str);

}

printf("\n");

count++;

}

for (int i = 0; i != count; i++){

printf(" ");

}

printf("%c\n", str);

for (int i = 1; i != n+1; i++){

count--;

for (int ii = count; ii != 0; ii--){

printf(" ");

}

for (int ii = 0; ii != (2 * i + 1); ii++){

printf("%c", str);

}

printf("\n");

}

}

运行结果:

ebc8f191db13e509feb2f6a535bdc0ec.png

6fc606f86820889552ab6d577306ada6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值