/*======================================================================
文字排版
总时间限制: 1000ms 内存限制: 65536kB
描述
给一段英文短文,单词之间以空格分隔(每个单词应包括其前后紧邻的标点符号)。请将短文重新排版,要求如下:
每行不超过80个字符;每个单词居于同一行上;在同一行的单词之间以一个空格分隔;行首和行尾都没有空格。 输入
第一行是一个整数n,表示英文短文中单词的数目. 其后是n个以空格分隔的英文单词(单词包括其前后紧邻的标点符号,且每个单词长度都不大于40个字母)。
输出
排版后的多行文本,每行文本字符数最多80个字符,单词之间以一个空格分隔,每行文本首尾都没有空格。
样例输入
84
One sweltering day, I was scooping ice cream into cones and told my four children they could "buy" a cone from me for a hug. Almost immediately, the kids lined up to make their purchases. The three youngest each gave me a quick hug, grabbed their cones and raced back outside. But when my teenage son at the end of the line finally got his turn to "buy" his ice cream, he gave me two hugs. "Keep the changes," he said with a smile.
样例输出
One sweltering day, I was scooping ice cream into cones and told my four
children they could "buy" a cone from me for a hug. Almost immediately, the kids
lined up to make their purchases. The three youngest each gave me a quick hug,
grabbed their cones and raced back outside. But when my teenage son at the end
of the line finally got his turn to "buy" his ice cream, he gave me two hugs.
"Keep the changes," he said with a smile.
========================================================================*/

大概分三类情况做不同处理,详细分类如图所示:

#include<stdio.h>
#include<string.h>
int main()
{
int n,i;
char a[]={'\0'},b[]={'\0'};//a数组是每次读取的一个单词(以空格分割的字符串),b数组是准备输出的一行(符合题目要求的字符串)。
int lenA=,lenB=;
freopen("4.in","r",stdin);
freopen("result.out","w",stdout);
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%s",a);
lenA=strlen(a);
if(lenB++lenA<)
{
if(lenB>)
strcat(b," ");
strcat(b,a);
lenB=strlen(b);
}
else if(lenB++lenA==||lenB++lenA==)
{
printf("%s %s\n",b,a);
lenB=;
b[]='\0';//清空b数组的数据
}
else //当lenB+1+lenA>80
{
printf("%s\n",b);
strcpy(b,a);
lenB=strlen(b);
}
}
printf("%s\n",b);//前面的循环可能会使最后一行没输出并一直留在b数组里面
return ;
}

OpenJudge计算概论-文字排版的更多相关文章

  1. OpenJudge计算概论-取石子游戏

    OpenJudge计算概论-取石子游戏[函数递归练习] /*====================================================================== ...

  2. Openjudge计算概论——数组逆序重放【递归练习】

    /*===================================== 数组逆序重放 总时间限制:1000ms 内存限制:65536kB 描述 将一个数组中的值按逆序重新存放. 例如,原来的顺 ...

  3. OpenJudge计算概论-计算书费

    /*============================================== 计算书费 总时间限制: 1000ms 内存限制: 65536kB 描述 下面是一个图书的单价表: 计算 ...

  4. OpenJudge计算概论-最高的分数

    /*======================================================== 最高的分数 总时间限制: 1000ms 内存限制: 65536kB 描述 孙老师 ...

  5. OpenJudge计算概论-比饭量【枚举法、信息数字化】

    /*====================================================================== 比饭量 总时间限制: 1000ms 内存限制: 655 ...

  6. Openjudge计算概论-角谷猜想

    /*===================================== 角谷猜想 总时间限制: 1000ms 内存限制: 65536kB 描述 所谓角谷猜想,是指对于任意一个正整数,如果是奇数 ...

  7. OpenJudge计算概论-字符串最大跨距

    /*====================================================================== 字符串最大跨距 总时间限制: 1000ms 内存限制: ...

  8. Openjudge计算概论-求序列中的众数

    /*===================================== 求序列中的众数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个长度为N的整数序列 (不多于128 ...

  9. OpenJudge计算概论-计算鞍点

    /*======================================================================== 计算鞍点 总时间限制: 1000ms 内存限制: ...

随机推荐

  1. <xliff:g>标签

    摘要: 这是Android4.3Mms源码中的strings.xml的一段代码: <!--Settings item desciption for integer auto-delete sms ...

  2. vs常用调试快捷键

    vs2005常用调试快捷键 ,开发起来更加的方面,虽然现在vs2008发布了,但vs2005还是一个主流,个人还是用vs2005,调试代码也多. F6: 生成解决方案Ctrl+F6: 生成当前项目F7 ...

  3. VirtualizingStackPanel

    <FlipView x:Name="flipView1" ItemsSource="{Binding}" ScrollViewer.HorizontalS ...

  4. Magento:Paypal付款不成功返回后不要清空购物车产品的解决方案

    经常遇到这个问题,当我们使用第三方支付工具Gateway如paypal支付的时候,如果用户付款不成功或者取消了订单再返回网站时,发现购物车里面的产品已经被清空了,如果是客户主动cancel的还好,但是 ...

  5. js获取非行内样式

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. PAT (Basic Level) Practise:1021. 个位数统计

    [题目链接] 给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种 ...

  7. hadoop问题锦集(一):mapreduce不能在集群中运行

    问题详细: 搭建类hadoop的集群集群环境,查看hadoop dfsadmin -report 也有datanode节点.在master:50070上也有. 然而在eclipse环境上运行mapre ...

  8. C/C++中的隐藏依赖

    转载自:http://trarck.googlecode.com/svn/trunk/article/C/%E9%9A%90%E8%97%8F%E4%BE%9D%E8%B5%96.txt 隐藏依赖:即 ...

  9. android布局中的divider(目前只知道TableLayout)

    目前在genymotion中设置了之后显示不出来行与行之间的分割线,但是在真机上面是没有问题的 1.使用xml属性添加(3.0以上版本) 设置LinearLayout标签的 android:showD ...

  10. 使用Matlab对灰度图像编程实现2D的傅里叶变换

    1.      先载入一幅灰度图像,如下: (非灰度图) 2. 利用函数fft2,对其进行快速傅立叶变换, 并利用函数fftshift 将变换后的图像原点移动到频率矩形的中心. 3. 利用abs()函 ...