PAT乙级1027 打印沙漏(测试点0、3格式错误)

1027 打印沙漏
坑点,天坑,每一行的字符后面是没有空格的。

#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>

using namespace std;

int main()
{
    int cur = 3;
    vector<int> nums;
    unordered_map<int,int> mp;
    mp[1] = 1;
    nums.push_back(1);
    while(nums.back()<=1000){
        nums.push_back(nums.back()+2*cur);
        mp[nums.back()] = cur;
        cur +=2;
    }
    int n;
    char c;
    cin>>n>>c;
    int id;
    for(int i=0;i<nums.size();i++){
        if(nums[i]>n){
            id=i-1;
            break;
        }
    }
    cur = mp[nums[id]];
    int cnt = 0;
    vector<string> ans;
    while(cur >= 1){
        ans.push_back(string(cnt,' ')+string(cur,c));//这里,不能再加上string(cnt,' ')
        cur-=2;
        cnt++;
    }
    for(int i=(int)ans.size()-2;i>=0;i--) ans.push_back(ans[i]);
    for(int i=0;i<ans.size();i++) cout<<ans[i]<<endl;
    cout<<n-nums[id]<<endl;
    return 0;
}

比如说当输入数据为

1000 *

结果为

*******************************************
 *****************************************
  ***************************************
   *************************************
    ***********************************
     *********************************
      *******************************
       *****************************
        ***************************
         *************************
          ***********************
           *********************
            *******************
             *****************
              ***************
               *************
                ***********
                 *********
                  *******
                   *****
                    ***
                     *
                    ***
                   *****
                  *******
                 *********
                ***********
               *************
              ***************
             *****************
            *******************
           *********************
          ***********************
         *************************
        ***************************
       *****************************
      *******************************
     *********************************
    ***********************************
   *************************************
  ***************************************
 *****************************************
*******************************************
33

每一行的字符前面是空格,但是字符后面不是空格,否则测试点0、3是格式错误。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值