E — Word Processor
题目大意:
奶牛贝西正在为她的写作课写论文。由于她的字写得很糟,她决定用文字处理机把这篇文章打出来。
文章包含N个单词(1≤N≤100),以空格分隔。每个单词的长度在1到15个字符之间,所有字符只包含大写或小写字母。根据作业要求,论文的格式为:每行不超过K(1≤K≤80)个字符,不包括空格。
幸运的是,贝西的文字处理软件可以满足这一要求,它采用了以下策略:如果贝西打了一个词,而且这个词可以用在现在这一行,那就把它写在这一行上。否则,将单词放到下一行。当然,同一行的连续单词之间仍然应该用一个空格隔开。任何一行的末尾都不应该有空格。
不幸的是,贝西的文字处理机坏了。请帮她把文章整理好!
输入
第一行包含两个用空格分隔的整数N和K。
下一行包含N个单词,用空格分隔。没有一个单词会大于K个字符。
输出
贝西格式正确的文章。
题目分析:
遍历每一个单词,判断在目前行剩余的位置能否写下这个单词,如果能,就判断是否为这一行的第一个单词(不是第一个单词前面需要先打印空格);不能则换行。
代码实现:
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
char word[101][20];
int main()
{
int n,k;
cin >> n >> k;
for(int i=0; i<n; i++)
{
scanf("%s",word[i]);
}
int num = k; //剩余位置的数目
for(int i=0; i<n; i++)
{
if(num==0) //剩余0,换行
{
num = k;
printf("\n");
}
if(strlen(word[i])<=num) //写得下
{
if(num!=k) printf(" "); //不是这一行的第一个单词,先打印空格
printf("%s",word[i]);
num -= strlen(word[i]);
}
else //写不下,换行,这个单词在下次循环中重新判断
{
printf("\n");
num = k;
i--;
}
}
printf("\n");
return 0;
}