OpenJudge计算概论-文字排版

简介: /*====================================================================== 文字排版 总时间限制: 1000ms 内存限制: 65536kB 描述 给一段英文短文,单词之间以空格分隔(每个单词应包括其前后紧邻的标点符号)。
/*======================================================================
文字排版
总时间限制: 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[45]={'\0'},b[85]={'\0'};//a数组是每次读取的一个单词(以空格分割的字符串),b数组是准备输出的一行(符合题目要求的字符串)。 
    int lenA=0,lenB=0;
    freopen("4.in","r",stdin);
    freopen("result.out","w",stdout);
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",a);
        lenA=strlen(a);
        if(lenB+1+lenA<79)
        {
            if(lenB>0)
                strcat(b," ");
            strcat(b,a);
            lenB=strlen(b);
        }
        else if(lenB+1+lenA==80||lenB+1+lenA==79)
        {
            printf("%s %s\n",b,a);
            lenB=0;
            b[0]='\0';//清空b数组的数据 
        }
        else //当lenB+1+lenA>80
        {
            printf("%s\n",b);
            strcpy(b,a);
            lenB=strlen(b);
        }
    }
    printf("%s\n",b);//前面的循环可能会使最后一行没输出并一直留在b数组里面 
    return 0;
}

 

相关文章
|
2月前
|
Python
【10月更文挑战第15天】「Mac上学Python 26」小学奥数篇12 - 图形变换与坐标计算
本篇将通过 Python 和 Cangjie 双语实现图形变换与坐标计算。这个题目帮助学生理解平面几何中的旋转、平移和对称变换,并学会用编程实现坐标变化。
66 1
|
6月前
|
存储 编解码 算法
C#.NET逃逸时间算法生成分形图像的毕业设计完成!晒晒功能
该文介绍了一个使用C#.NET Visual Studio 2008开发的程序,包含错误修复的Julia、Mandelbrot和优化过的Newton三种算法,生成色彩丰富的分形图像。作者改进了原始算法的效率,将内层循环的画点操作移至外部,提升性能。程序提供五种图形模式,支持放大缩小及颜色更新,并允许用户自定义画布大小以调整精度。还具备保存为高质JPG的功能。附有四张示例图片展示生成的分形效果。
|
数据可视化 前端开发 安全
头疼数学图表?CMU学霸开源「玫瑰笔」,让你一键绘图自由
数学可能是最抽象的学科了。虽然有很多可视化工具,但实际使用过程中却存在学习门槛高、画图流程长等问题,一个简单的公式用画图工具可能需要做很久。为了解决这个问题,来自CMU和Technion的一组研究人员推出了Penrose,它可以将复杂的数学符号转换为各种风格的简单图表,引发社区热议。
230 0
头疼数学图表?CMU学霸开源「玫瑰笔」,让你一键绘图自由
|
数据可视化 安全
指数增长、拐点,斯坦福学霸自制动画,用最简单的方式解释疫情常见词
指数增长、拐点,斯坦福学霸自制动画,用最简单的方式解释疫情常见词
182 0
《设计的品格 探索×呈现×进化的InDesign美学》—第1课1.3节文字游戏
<span style='letter-spacing:1px'>本节书摘来自异步社区《设计的品格 探索×呈现×进化的InDesign美学》一书中的第1课1.3节文字游戏,作者【澳】Daphne Shao , Recto , Verso Studio,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1614 0
|
API
《设计的品格 探索×呈现×进化的InDesign美学》—第1课1.6节 字体
<span style='letter-spacing:1px'>本节书摘来自异步社区《设计的品格 探索×呈现×进化的InDesign美学》一书中的第1课1.6节 字体,作者【澳】Daphne Shao , Recto , Verso Studio,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1386 0
|
API
《设计的品格 探索×呈现×进化的InDesign美学》—第1课1.1节文字初步
<span style='letter-spacing:1px'>本节书摘来自异步社区《设计的品格 探索×呈现×进化的InDesign美学》一书中的第1课1.1节文字初步,作者【澳】Daphne Shao , Recto , Verso Studio,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1299 0
下一篇
DataWorks