本文共 1279 字,大约阅读时间需要 4 分钟。
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
4This is a test case
asa Tst ihe tsi ce s
坑点:
cin.getline()
读入第二行的非空字符串的时候,最后一个样例点怎么都过不去,把这部分换成getchar
莫名其妙就过了,这点真的很让人疑惑,,,希望有大佬能解答。主要思路就是,第 i i i 行从右往左,是从 i i i 个字符开始每隔 n n n 个的字符,也就是第 i i i 行第 j j j 列的字符是原字符串第 i + j ∗ n i + j * n i+j∗n 个字符。如果 i + j ∗ n i + j * n i+j∗n 超过了原字符串的长度,用空格补齐。
#include#define INF 0x3f3f3f3f#define PI acos(-1)using namespace std;typedef pair P;typedef long long ll;const int N = 3e5 + 19;const ll mod = 1e9 + 7;char str[N];char tmp[N];int main(){ int n; cin >> n; getchar(); int m = 0; while((str[m] = getchar()) != '\n') { m++; } int cnt = 0; int k = m / n; if(m % n) k++; for(int i = 0; i < n; i++) { int nn = i; while(nn < m) { tmp[cnt++] = str[nn]; nn += n; } for(int i = k - 1; i >= 0; i--) { if(i >= cnt) cout << ' '; else cout << tmp[i]; } cout << endl; cnt = 0; } return 0;}
转载地址:http://kjwzz.baihongyu.com/