L1-002 打印沙漏

自己用C做了一套解答程序,但是一直通不过测试点0,等过会再来看看;

// PTA团体L1-002
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void star_up(int n);
void star_down(int n);
int main(void)
{
    int i=1,item=0;
    int N,left,n;
    char ch;
    double sum=1.0;
    scanf("%d %c", &N,&ch);
    if (N <= 0)
        printf("\n");
    else if (N <= 6) {
        putchar(ch);
        printf("\n");
    }
    else {
        while (N >= sum) {
            item = 2 * (2 * i + 1);
            sum = sum + item;
            i++;
        }

        sum = sum - 2 * (2 * (i - 1) + 1);
        n = (i - 2) * 2 + 1;
        star_up(n);
        star_down(n);
        
    }
    left = N - sum;
    printf("%d\n", left);
    return 0;
}

void star_up(int n) {
    int i,item,j,k;
    n = (n - 1) / 2;
    for (i = n; i >= 0; i--) {
        for (j = 1; j <= n - i; j++)
            printf(" ");
        item = 2 * i + 1;
        for (k = 1; k <= item; k++)
            printf("*");
        printf("\n");
    }
}
void star_down(int n) {
    int i,j,item,k;
    n = (n - 1) / 2;
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= n - i; j++)
            printf(" ");
        item = 2 * i + 1;
        for (k = 1; k <= item; k++)
            printf("*");
        printf("\n");
    }
}

下面是网上的一位大佬做的,仅供以后学习参考:

#include<stdio.h>
#include<math.h>
void print(char ch, int count) {
	while (count-- > 0)putchar(ch);
}	//print(ch,c):打印ch字符c遍。
int main() {
	int n, ch, h,i;
	scanf("%d %c", &n, &ch);
	h = (int)sqrt((n + 1) / 2); //h=g(n)
	for (i = 1-h; i < h; i++){
		int j = abs(i);
		print(' ', h - 1 - j);	//空格
		print(ch, 2 * j + 1);	//ch
		putchar('\n');	//换行
	}
	printf("%d", n - (2 * h*h - 1));
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值