古风排版 (20分)
题目:
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)
输入样例:
4
This is a test case
输出样例:
细节分析:
1.注意getchar(); 与getline(cin,a);的配合 (a为string类型,getline会吞掉回车)
- 注意一个小细节:
这是组样例是一个小坑(出现len%n==0的情况)
4
swduuif hfbwif wfbwi wfbi
3.s[i%n]+=a[i];不要写成s[i%4]+=a[i];好幼稚啊
4.最后一列是从左往右数第一列 QAQ
代码:
//一道细节题
//ios::sync_with_stdio(false);
#include<bits/stdc++.h>
#define LL long long
#define fo(i,a,b) for(int i=a;i<b;i++)
#define foo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int main(){
int n; cin>>n;
string s[n],a;
getchar();
getline(cin,a);
int len=a.length();
int k=n-len%n;
if(k==n)k=0;//排除特例
len+=k;
fo(i,0,k)a+=' ';
fo(i,0,len)
s[i%n]+=a[i];
fo(i,0,n){
reverse(s[i].begin(),s[i].end());
cout<<s[i];
if(i!=n-1)cout<<endl;
}
return 0;
}/*
4
swduuif hfbwif wfbwi wfbi
*/
另一道模拟题:
大意:
给定一个字符串,输出所有长度至少为2的回文子串
输出格式:
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出
代码:
#include<iostream>
#include<cstring>
using namespace std;
int main( ){
char a[505];
int n,len,begin,maxBegin,i,j;
cin>>a;
n=strlen(a);
for(len=2;len<=n;len++){//枚举子串长度
maxBegin=n-len;
for(begin=0;begin<=maxBegin;begin++){//枚举子串的开始点
j=begin+len-1;//子串终点
for(i=begin;i<j;i++,j--) //遍历当前子串(a[i]~a[begin+len-1]),判断是否回文串
if(a[i]!=a[j]) break;
if(i>=j) {//是回文串
j=begin+len-1;
for(i=begin;i<=j;i++) cout<<a[i];
cout<<endl;
}
}
}
return 0;
}