自测-1 打印沙漏 (20 point(s))

By | 最新修改:2024-08-17

这是 拼题A(PTA)《中国大学MOOC-陈越、何钦铭-数据结构-起步能力自测题》的习题。原题在 https://pintia.cn/problem-sets/17/problems/260 (侵删)
本人的答案仅供交流学习,请勿用于当作答案来提交!

题目描述:

自测-1 打印沙漏 (20 point(s))
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

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

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

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

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

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

输入样例:
19 *
输出样例:

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

我的答案:

/*================================================================
*   Copyright (C) 2019 程序知路. All rights reserved.
*   
*   Filename    :自测1.c
*   Author      :程序知路
*   E-Mail      :admin@icxzl.com
*   Create Date :2019年09月25日
*   Description :
================================================================*/
#include 

void print_symbol(int factor, int amount_layer, int layer, char symbol, int *symbol_count);

int main () {

    int N;
    char c;
    scanf("%d %c", &N, &c);

    if (N >= 1 && N  0) {
            factor += 2;
        }

        //printf("%d %d\n", layer, factor);
        for (int i = 0; i  0; i --, factor += 2, layer ++) {
            print_symbol(factor, amount_layer, layer, c, &symbol_count);
        }

        printf("%d", N - symbol_count);

    }

    return 0;
}

void print_symbol(int factor, int amount_layer, int layer, char symbol, int *symbol_count) {
    for (int i = 0; i 

程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com