First——代码先上来(“文明写题,请勿愣抄“”)
#include<bits/stdc++.h>
using namespace std;
#define L 80
int main(){
string s;
int n,r=L;
cin >> n;
for(int i = 1; i <= n; ++i){
cin >> s;
if(r == L){
cout << s;
r -= s.length();
}
else if(r>=s.length()+1){
cout<<' '<<s;
r -= s.length()+1;
}
else{
cout<<endl<< s;
r=L-s.length();
}
}
return 0;
}
(解法1)
#include<bits/stdc++.h>
using namespace std;
#define L 80
int main(){
string s[1005],ans;
int n,h=0;
cin >> n;
for(int i=1;i<=n;++i)
cin>>s[i];
for(int i=1;i<=n;++i){
if(h==0){
ans=ans+s[i];
h+=s[i].length();
}
else if(h+s[i].length()+1<=L){
ans=ans+' '+s[i];
h+=s[i].length()+1;
}
else{
ans=ans+'\n'+s[i];
h=s[i].length();
}
}
cout<<ans;
return 0;
}
(解法2)
这道题还是很简单的,稍稍讲一下就可以。
Second——考点:字符串输入输出及存储。
Third——解题方法
解法1
设r为当前行剩余的可以添加的字符数。
第一个单词直接加入,后面加入单词时要包括单词前面的空格,所以每次加入单词后,剩余的字符数减少:单词长度+1。
- 如果r减去当前单词长度+1后小于0,则该单词应该放在下一行。换行,输出该单词,而后r变为80减去当前单词长度。
- 其他情况,输出空格与该单词,r减少:单词长度+1。
解法2
设h为当前行已经占用的字符数。
第一个单词直接加入,后面加入单词时要包括单词前面的空格,所以每次加入单词后,已经占用的字符增加:单词长度+1。
- 如果h为0,输出该单词,h只增加一个单词的长度。
- 如果h加上当前单词长度+1后,大于80个字符,则该单词应该放在下一行。换行,输出该单词,而后h变为当前单词长度。
- 其他情况,输出空格与该单词,h增加单词长度+1。
//注:可以一边遍历一边输出,也可以先构造字符串,最后一起输出。
亲测全AC