zoukankan      html  css  js  c++  java
  • 1027. 打印沙漏(20)

    原题: https://www.patest.cn/contests/pat-b-practise/1027

    实现思路: 假如把题目中的空格, 替换成+号, 那么一个测试输入输出如下:

    输入:
    19 *
    
    输出:
    *****
    +***
    ++*
    +***
    *****
    2
    

    此题相信大家都有思路, 主要是注意坑.
    坑1: *号后面是不可以有空格的.
    坑2: 就算剩余符号个数为0, 仍然要把0打印出来.

    完整代码:

    #include <stdio.h>
    
    void print (int n, char ch, int maxLen);
    
    int main (void) {
        int res[1000];
        int len = 0;    // 结果数据长度
        int leave = 0;  // 剩下没用掉的符号数
        int sum = 1;    // 符合条件数据和
        int i = 3;      // 1 情况特殊, 单独考虑
        int n;          // 给定的符号数
        char symbol;    // 要打印的符号
    
        scanf("%d %c", &n, &symbol);
        while ((2 * i + sum) <= n) {
            sum += 2 * i;
            res[len] = i;
            len++;
            i += 2;     
        }
        leave = n - sum;
    
        // 控制打印
        if (len != 0) {
            for (i=len-1; i>=0; i--) {
                print(res[i], symbol, res[len - 1]);
            }
            print(1, symbol, res[len - 1]);
            for (i=0; i<len; i++) {
                print(res[i], symbol, res[len - 1]);
            }
        } else {
        // 输入的符号只有1个的情况
            printf("%c
    ", symbol);
        }
        // 经过测试, 就算是刚好用完所有符号, 也要打印剩余
        // 符号数, 此时剩余符号数是 0 
        printf("%d
    ", leave);
    
        return 0;
    }
    
    // n打印次数, ch打印符号, maxLen一行最大长度
    void print (int n, char ch, int maxLen) {
        int i;
        int space = (maxLen - n) / 2; // 需要打印的空格数
        // 打印空格
        for (i=1; i<=space; i++) {
            printf("+");
        }
        // 打印符号
        for (i=1; i<=n; i++) {
            printf("%c", ch);
        }
        printf("
    ");
    }
    
  • 相关阅读:
    Activity的几种启动模式
    android 环境搭建
    认识python中__name__、程序主入口
    32位与64位之谈
    shell中字符串基本用法
    C++ push方法与push_back方法
    8-10总结
    第九章 硬件抽象层:HAL
    第十章 嵌入式Linux的调试技术
    第八章
  • 原文地址:https://www.cnblogs.com/asheng2016/p/7823111.html
Copyright © 2011-2022 走看看