Uva400 [vector与字符串]

题目连接

http://acm.hust.edu.cn/vjudge/problem/19295

Sample Input

19
Mr._French
Jody
Buffy
Sissy
Keith
Danny
Lori
Chris
Shirley
Marsha
Jan
Cindy
Carol
Mike
Greg
Peter
Bobby
Alice
Ruben

Sample Output

. ————————————————————
Alice Chris Jan Marsha Ruben
Bobby Cindy Jody Mike Shirley
Buffy Danny Keith Mr._French Sissy
Carol Greg Lori Peter

题意

给出许多文件名,把他们按字典序排序后,按左对齐的方式,从左往右输出,最长的字符串为x,最右边的字符串占x,其余都占x+2个位置。

题解

开始没有弄懂题意,这个表格的宽度是60个字符是给定的,所以可以根据最长的字符串长度来算出表格的宽度与长度。但是打印的时候本弱鸡又不知道怎么可以打出从左往有,从上到下的顺序…可以由行列数计算出在数组中的位置(x,y)的是s[y*row+x],x与y都是从0开始。要判断y *row+x是否已经大于n了…没有反应过来这个值是可以大于给定的字符串个数的。T了好久。

代码

#include<bits/stdc++.h>
using namespace std;

int main()
{   freopen("out.txt","w",stdout);
    int n,i;
    while(cin>>n)
    {
        string st;
        vector<string>s;
        int cnt=0;
        for( i=0;i<n;i++)
        {

            cin>>st;
            int z=st.length();
            cnt=max(cnt,z);
            s.push_back(st);
        }
        sort(s.begin(),s.end());
        for(int i=0;i<60;i++)
            cout<<'-';
        cout<<'\n';
        int col,row;
        col=((60-cnt)/(cnt+2))+1;
        if(n%col==0)row=n/col;
        else row=(n/col)+1;
        int k,j;
        for( i=0;i<row;i++)
        {
            for( j=0;j<col;j++)
            {
                k=j*row+i;
                if(k<n){
                if(i==col-1)
                {
                    cout<<s[k];
                    for(int jj=0;jj<cnt-s[k].length();jj++)cout<<' ';

                }
                else
                {
                    cout<<s[k];
                    int nn=cnt+2-s[k].length();
                    for(int jj=0;jj<cnt+2-s[k].length();jj++)cout<<' ';

                }
                }
            }
            printf("\n");
        }

    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值