【openjudge】P6374文字排版
【描述】
给一段英文短文,单词之间以空格分隔(每个单词包括其前后紧邻的标点符号)。请将短文重新排版,要求如下:
每行不超过80个字符;每个单词居于同一行上;在同一行的单词之间以一个空格分隔;行首和行尾都没有空格。
【输入】
输入第一行是一个整数n,表示英文短文中单词的数目. 其后是n个以空格分隔的英文单词(单词包括其前后紧邻的标点符号,且每个单词长度都不大于40个字母)。
【输出】
输出排版后的多行文本,每行文本字符数最多80个字符,单词之间以一个空格分隔,每行文本首尾都没有空格。
【分析:】
每一个单词的输出格式有三种情况:
- 是这一行的第一个单词(当前行字符总数+该单词长度>80)
- 是这一行的最后一个单词(当前行字符总数+单词长度=80)
- 在这一行中既不是第一个单词也不是最后一个单词(当前行字符总数+单词长度+1<=80)
对于情况1. 在输出单词前先换行
情况2. 输出单词后在换行
情况3. 输出单词后输出空格
【代码:】


1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 using namespace std;
5
6 int n;
7 int num[2001];
8 char atl[2001][51];
9
10 int main() {
11 scanf("%d", &n);
12 for(int i = 1; i <= n; i++) {
13 scanf("%s", atl[i]);
14 num[i] = strlen(atl[i]);
15 }
16 int sum = 0;
17 for(int i = 1; i <= n; i++) {
18 if(sum + num[i] + 1 <= 80) {
19 printf("%s ", atl[i]);
20 sum = sum + num[i] + 1;
21 continue;
22 }
23 if(sum + num[i] <= 80) {
24 printf("%s\n", atl[i]);
25 sum = 0;
26 continue;
27 }
28 sum = 0;
29 printf("\n%s ", atl[i]);
30 sum = sum + num[i] + 1;
31 }
32 }单词排版from:
http://noi.openjudge.cn/ch0113/17/
相关推荐
ITxiaobaibai 2020-01-02
CSDN人工智能头条 2020-10-18
Cherishyuu 2020-06-25
ding0 2020-05-18
forrestyanyu 2020-05-06
happywxp 2020-04-14
81296031 2020-04-08
junzi 2020-02-11
wintelx 2020-02-03
LonelyTraveler 2020-02-03
junzi 2020-01-31
zengni 2019-12-22
SuperYPC 2019-12-01
学海无边回头是岸 2019-07-18
SUDevops 2019-11-03
码海拾遗 2019-08-21
糨糊 2017-12-17
VincentDrW 2017-12-17