NC201605. Bits
描述
输入描述
共一行:一个整数n,表示最开始n个盘子(编号为1到n)的放置方法。
数据满足:。
输出描述
共组:每组n+2行,每行个字符,用.表示空白区域,用|表示柱子区域,用*表示盘子。组与组之间请输出个-。
具体输出方式请参看样例进行理解。
示例1
输入:
2
输出:
................... ...|.....|.....|... ..***....|.....|... .*****...|.....|... ------------------- ................... ...|.....|.....|... ...|.....|.....|... .*****..***....|... ------------------- ................... ...|.....|.....|... ...|.....|.....|... ...|....***..*****. ------------------- ................... ...|.....|.....|... ...|.....|....***.. ...|.....|...*****.
C++(g++ 7.5.0) 解法, 执行用时: 63ms, 内存消耗: 2472K, 提交时间: 2022-09-05 09:27:44
#include <bits/stdc++.h> using namespace std; vector<int> A, B, C; int n; string p2(int x) { if (x == 0) return string(n+1, '.') + "|" + string(n, '.'); return string(n-x+1, '.') + string(2*x+1, '*') +string(n-x, '.'); } void p() { cout << string(3*(2*n+1)+4, '.') << endl; for (int i = n; i >= 0; i--) { cout << p2(i < A.size()?A[i]: 0) << p2(i < B.size()?B[i]: 0) << p2(i < C.size()?C[i]: 0) << "." << endl; } } void gao(int l, vector<int> &a, vector<int> &b, vector<int> &c) { if (l == 0) return; gao(l-1, a, c, b); c.push_back(a.back()); a.pop_back(); cout << string(3*(2*n+1)+4, '-') << endl; p(); gao(l-1, b, a, c); } int main() { cin >> n; for (int i = n; i >= 1; i--) A.push_back(i); p(); if (n%2==0) gao(n, A, B, C); else gao(n, A, C, B); }
C++(clang++ 11.0.1) 解法, 执行用时: 65ms, 内存消耗: 2416K, 提交时间: 2023-06-06 19:44:08
#include<bits/stdc++.h> using namespace std; vector<int>a,b,c; int n; string p2(int x){ if(x==0) return string(n+1,'.')+"|"+string(n,'.'); else return string(n-x+1,'.')+string(2*x+1,'*')+string(n-x,'.'); } void p(){ cout<<string(3*(2*n+1)+4,'.')<<endl; for(int i=n;i>=0;i--) cout<<p2(i<a.size()?a[i]:0)<<p2(i<b.size()?b[i]:0)<<p2(i<c.size()?c[i]:0)<<"."<<endl; } void han(int l,vector<int>&a,vector<int>&b,vector<int>&c){ if(l==0)return; han(l-1,a,c,b); c.push_back(a.back()); a.pop_back(); cout<<string(3*(2*n+1)+4,'-')<<endl; p(); han(l-1,b,a,c); } int main(){ cin>>n; for(int i=n;i>=1;i--)a.push_back(i); p(); if(n%2) han(n,a,c,b); else han(n,a,b,c); }