zoukankan      html  css  js  c++  java
  • poj3218

    模拟,注意Justify模式的最后一行,无论有几个单词都要用Left方式输出。

    View Code
    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    #define maxn 505
    #define maxl 80
    #define max_len 75
    
    char word[maxn][maxl];
    char cmd[3];
    int n;
    int sum[maxn];
    int word_len[maxn];
    
    void input()
    {
        scanf("%s", cmd);
        int i = 1;
        while (~scanf("%s", word[i]))
            i++;
        n = i - 1;
        for (int i = 1; i <= n; i++)
            word_len[i] = strlen(word[i]);
        sum[0] = 0;
        for (int i = 1; i <= n; i++)
            sum[i] = sum[i - 1] + word_len[i];
    }
    
    int find_end(int s)
    {
        int len = word_len[s];
        int i = s + 1;
        while (len + word_len[i] + 1 <= max_len && i <= n)
        {
            len += word_len[i] + 1;
            i++;
        }
        return i;
    }
    
    int space_num(int s, int e)
    {
        return max_len - (sum[e - 1] - sum[s - 1]);
    }
    
    void left(int s, int e)
    {
        for (int i = s; i < e - 1; i++)
            printf("%s ", word[i]);
        puts(word[e - 1]);
    }
    
    void right(int s, int e)
    {
        int num = space_num(s, e);
        for (int i = 0; i < num - (e - s - 1); i++)
            putchar(' ');
        left(s, e);
    }
    
    void justify(int s, int e)
    {
        if (e - s == 1)
        {
            puts(word[s]);
            return;
        }
        if (e == n + 1)
        {
            left(s, e);
            return;
        }
        int num = space_num(s, e);
        int base = num / (e - s - 1);
        int extra = num % (e - s - 1);
        printf("%s", word[s]);
        for (int i = 1; i <= e - s - 1; i++)
        {
            for (int j = 0; j < base; j++)
                putchar(' ');
            if (i <= extra)
                putchar(' ');
            printf("%s", word[s + i]);
        }
        putchar('\n');
    }
    
    void center(int s, int e)
    {
        int num = space_num(s, e);
        int temp = num - (e - s - 1);
        int left_space = temp / 2;
        for (int i = 0; i < left_space; i++)
            putchar(' ');
        left(s, e);
    }
    
    void work()
    {
        int s, e;
        e = s = 1;
        while (e <= n)
        {
            e = find_end(s);
            if (cmd[0] == 'J')
                justify(s, e);
            else if (cmd[0] == 'L')
                left(s, e);
            else if (cmd[0] == 'R')
                right(s, e);
            else
                center(s, e);
            s = e;
        }
    }
    
    int main()
    {
        //freopen("t.txt", "r", stdin);
        input();
        work();
        return 0;
    }
  • 相关阅读:
    7.12
    Powerdesigner使用方法
    数据库中float类型字段,转化到前端显示,统一保留两位小数
    【1】直接插入排序
    KMP算法
    ssm框架下web项目,web.xml配置文件的作用
    客户要求输入框要记录下上一次输入的内容
    tomcat启动闪退
    页面第一次加载,JS没有效果,刷新一下就好了
    机器学习,安装python的支持包
  • 原文地址:https://www.cnblogs.com/rainydays/p/2750847.html
Copyright © 2011-2022 走看看