描述
壮壮研学结束后,写了一篇英文论文,这篇论文共有N个单词(1≤N≤100),单词之间用空格分隔。
每个单词的长度在1到15之间,仅由大写和小写字母组成。
他想尝试投稿,杂志社给出了一个特殊的排版要求:每一行包含的字符不超过K个(1<= K <=80),空格不计。
请写一个程序,以处理这样的要求,它会按照如下的方式进行排版:
如果壮壮输入了一个单词,这个单词能够放进当前行,就放在当前行;否则,将这个单词放到下一行,然后继续向下一行添加单词;
当然,同一行中的单词之间仍然用一个空格分隔。每一行的结尾都不应当有空格。
输入
输入共两行。
第一行,两个空格分隔的整数N和K。(1 <= N <= 100,1 <= K <= 80)
第二行,包含N个单词,单词之间用单个空格分隔。所有单词的长度都不超过一行中的字符上限数K。
输出
若干行。
按要求输出正确排版的论文。
输入样例 1
10 7
he1lo my name is Zhuang and this is my essay
输出样例 1
hello my
name is
Zhuang
and this
is my
essay
提示
第一行包含7个非空格字符,包括"hello”以及“my"。再加入"name"会使得第一行包含11>7个非空格字符,所以这个单词会被放到下一行。
来源
2023 广西中小学生程序设计挑战赛入门组复赛
语言: C++
#include <stdio.h>
#include <string.h>
int main()
{
int N, K;
scanf("%d%d", &N, &K);
char words[100][100];
for (int i = 0; i < N; i++)
scanf("%s", &words[i][0]);
int pre = 0;
for (int i = 0; i < N; i++)
{
int curr = strlen(words[i]);
if (pre + curr > K)
{
printf("\n%s", words[i]);
pre = curr;
}
else
{
if (pre > 0) printf(" ");
printf("%s", words[i]);
pre += curr;
}
}
return 0;
}
C++代码:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char words[101][82] = { 0 };
int N, K;
cin >> N >> K;
for (int i = 0; i < N; i++)
{
cin >> words[i];
}
int lineLen = 0; //当前行的长度
cout << words[0];
lineLen = strlen(words[0]); //直接输出第一个单词,并记录当前行的长度
for (int i = 1; i < N; i++)
{
int tmp = strlen(words[i]);
if (lineLen+tmp > K) //每行字符个数超过K
{
cout << endl << words[i];
lineLen = tmp; //更新新行的字符个数
}
else
{
cout << " " << words[i]; //输出空格和该单词
lineLen += tmp; //字符个数加上该单词的长度
}
}
return 0;
}
【以下回答由 GPT 生成】
这个问题可以通过模拟的方式来解决。我们可以按照要求逐行地排版论文。
下面是解决这个问题的具体步骤:
current_line
,用于存储当前行的内容。current_line
中不会导致字符数超过限制K,则将其加入到current_line
中,并在单词后面添加一个空格。current_line
打印出来作为一行的内容,并清空current_line
。current_line
中,并在单词后面添加一个空格。current_line
。下面是使用C++语言实现的代码:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int N, K;
cin >> N >> K;
vector<string> words(N);
for (int i = 0; i < N; i++) {
cin >> words[i];
}
string current_line = "";
for (int i = 0; i < N; i++) {
if (current_line.length() + words[i].length() <= K) {
current_line += words[i] + " ";
} else {
cout << current_line << endl;
current_line = words[i] + " ";
}
}
cout << current_line << endl;
return 0;
}
这个程序首先读取输入的N和K,并创建一个向量来存储N个单词。然后,通过遍历每一个单词,将它们按照要求排版在每一行中。最后,打印出最后一行的内容。
现在我们已经完成了解决方案。如果没有问题,请回答"解决了",否则请详细描述遇到的问题。
【相关推荐】