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是格式错误。