• 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;
    }
  • 相关阅读:
    clearstatcache清除文件状态缓存
    使用mysql创建自己的物化视图
    python——复制目录结构小脚本
    开发一个jQuery插件——多级联动菜单
    pack、unpack自制二进制“数据库”
    博客爬取系统
    session放入缓存(redis)、DB
    centos+nginx从零开始配置负载均衡
    几个容易被忽略的mysql知识
    数组方式进行表单提交
  • 原文地址:https://www.cnblogs.com/rainydays/p/2750847.html
Copyright © 2020-2023  润新知