• 【openjudge】【字符串】P6374文字排版


    【描述】

    给一段英文短文,单词之间以空格分隔(每个单词包括其前后紧邻的标点符号)。请将短文重新排版,要求如下:

    每行不超过80个字符;每个单词居于同一行上;在同一行的单词之间以一个空格分隔;行首和行尾都没有空格。

    【输入】

    输入第一行是一个整数n,表示英文短文中单词的数目. 其后是n个以空格分隔的英文单词(单词包括其前后紧邻的标点符号,且每个单词长度都不大于40个字母)。

    【输出】

    输出排版后的多行文本,每行文本字符数最多80个字符,单词之间以一个空格分隔,每行文本首尾都没有空格。


    【分析:】

    每一个单词的输出格式有三种情况:

    1. 是这一行的第一个单词(当前行字符总数+该单词长度>80)
    2. 是这一行的最后一个单词(当前行字符总数+单词长度=80)
    3. 在这一行中既不是第一个单词也不是最后一个单词(当前行字符总数+单词长度+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
    ", atl[i]);
    25             sum = 0;
    26             continue;
    27         }
    28         sum = 0;
    29         printf("
    %s ", atl[i]);
    30         sum = sum + num[i] + 1;
    31     }
    32 }
    单词排版

    from:

    http://noi.openjudge.cn/ch0113/17/

  • 相关阅读:
    服务器(Ubuntu 12.04 LTS)上编译基于OpenCV的项目遇到的问题及解决方案
    ubuntu 16.04 LTS 降级安装gcc 4.8
    C#程序中获取电脑硬件配置信息的一种方法
    C#程序将对象保存为json文件的方法
    C#中运用事件实现异步调用
    Redis实现分布式锁 php
    CI框架整合UEditor编辑器上传功能
    PHP给图片加水印具体实现
    检测网站是否被和谐!
    vue的双向绑定和依赖收集
  • 原文地址:https://www.cnblogs.com/devilk-sjj/p/8997242.html
Copyright © 2020-2023  润新知