zoukankan      html  css  js  c++  java
  • PTA 乙级 1027 打印沙漏 (20分) C/C++

     需要找规律确定最大的沙漏形状,将沙漏分为两部分看

     上半部分比下半部分多一个符号,所以 总符号数 = 2*上半部分符号数 - 1

    上半部分符号数 = (项数 * (1 + 一行中输出最多的符号数))/ 2

    找到最终关系: 总符号数 = 2 * 项数^2 - 1(2n^2 - 1) 

    通过这个关系可以找到最大沙漏形状

    注意:

    • 测试点0、3,在符号后不可输出空格,应直接换行
    • 测试点1,输入为1时的输出结果错误

    放代码:

    C++

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 int main() {
     6     /*输入正整数*/
     7     int n = 0;
     8     /*总行数*/
     9     int sl = 0;
    10     /*位于n前面和后面所需符号数*/
    11     int n1, n2;
    12     /*输入的符号*/
    13     char w;
    14     cin >> n >> w;
    15     for (int i = 0;; i++) {
    16         n1 = 2 * (i * i) - 1;                //n之前形成沙漏形状所需要的符号数
    17         n2 = 2 * ((i + 1) * (i + 1)) - 1;    //n之后形成沙漏形状所需要的符号数
    18         if (n >= n1 && n < n2) {
    19             sl = 2 * i - 1;                    //第一行输出的符号数(总行数)
    20             break;
    21         }
    22     }
    23     int c = sl;                                //用于计算每行所需要的输出的符号
    24     int flag = 1;                            //空格输出个数累加/减标志位
    25     for (int i = 0; i < sl; i++) {
    26         for (int j = 0; j < (sl - c) / 2; j++)cout << ' '; //只有符号前用输出空格,符号之后没有空格
    27         for (int j = 0; j < c; j++) cout << w;
    28         if (flag) c -= 2; else c += 2;
    29         if (c == 1)flag = 0;
    30         cout <<  endl;
    31     }
    32     cout << n - n1;                //剩余没用的符号数
    33     return 0;
    34 }

    挺有意思的一个题

  • 相关阅读:
    forfiles
    windows 安装 keras
    windows上使用tensorboard
    python类定义与c#的一些区别
    iis https 客户端证书
    DevExpress历史安装文件、源码、注册破解下载
    AE开发,执行GP操作的时候的错误
    USB无线网卡和PCI-E无线网卡如何选择(转)
    .NET 对实现IPersistStream接口的对象进行保存和读取
    搜索
  • 原文地址:https://www.cnblogs.com/SCP-514/p/13296904.html
Copyright © 2011-2022 走看看