xtu1381表格 为什么wrong answer 样例都是对的各位大佬帮帮孩子球球了

表格

题目描述

用户输入一个表格的文本,请按如下格式输出:

1. 用'-'表示横线,'|'表示竖线,'+'表示横竖线的交点
2. 列宽为当前列最长字符串长度+2
3. 每列的对齐方式相同,一共有三种,分别为靠左对齐,居中对齐,靠右对齐,分别用'l','c','r'表示。 
    a. 靠左对齐,字符串左端距离边线1个空格;
    b. 居中对齐,字符串距离边线左和右空格数的差不超过1,且左边空格数小于等于右边空格数。
    c. 靠右对齐,字符串右端距离边线1个空格;

输入

第一行是一个整数T(1≤T≤100) , 表示样例的个数。

每个样例的第1行是两个整数r,c(1≤r,c≤10),表示表格的行和列数。
第2行是c个字符,字符只由'l','c','r'三种组成,依次表示对应列的对齐方式。
以后的r行,每行c个字符串,表示对应行列的单元格内容,字符串只含英文字母,数字,长度不超过20个字符。

输出

按格式依次输出每个样例的的结果。

样例输入

1
3 5
lcccr
Name  English Math Chinese Total
Alice 100     85   75      260
Bob   85      100  85      270

样例输出

+-------+---------+------+---------+-------+
| Name  | English | Math | Chinese | Total |
+-------+---------+------+---------+-------+
| Alice |   100   |  85  |   75    |   260 |
+-------+---------+------+---------+-------+
| Bob   |   85    | 100  |   85    |   270 |
+-------+---------+------+---------+-------+
#include<stdio.h>
#include <string.h>
char a[20][20][20];
int main()
{
    int t,l1,l2,w;
    scanf("%d",&t);
    while(t--){
        int m,n;
        scanf("%d %d",&m,&n);
        char s[11]={0};
        scanf("%s",s);
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                scanf("%s",a[i][j]);
            }
        }
        int d[20]={0};
        for(int j=0;j<n;j++){
            for(int i=0;i<m;i++){
                if(strlen(a[i][j])>d[j]) d[j]=strlen(a[i][j]);
            }
            d[j]+=2;
        }
        for(int i=0;i<m;i++){
            if(i==0){
                printf("+");
                for(int k=0;k<n;k++){
                    w=d[k];                        
                    while(w--){
                        printf("-");
                    }
                    printf("+");
                }
                printf("\n");
            }
            printf("|");            
            for(int j=0;j<n;j++){
                if(s[j]=='l'){
                    l1=d[j]-strlen(a[i][j])-1;
                    printf(" %s",a[i][j]);
                    while(l1--){
                        printf(" ");
                    }
                    printf("|");
                }
                if(s[j]=='c'){
                    l1=(d[j]-strlen(a[i][j]))/2;
                    l2=d[j]-l1-strlen(a[i][j]);
                    while(l1--){
                        printf(" ");
                    }
                    printf("%s",a[i][j]);
                    while(l2--){
                        printf(" ");
                    }
                    printf("|");
                }
                if(s[j]=='r'){
                    l1=d[j]-strlen(a[i][j])-1;
                    while(l1--){
                        printf(" ");
                    }
                    printf("%s ",a[i][j]);
                    printf("|");
                }
            }
            printf("\n");
            printf("+");
            for(int k=0;k<n;k++){
                w=d[k];                        
                while(w--){
                    printf("-");
                }
                printf("+");
            }
            printf("\n");
        }
    }
     return 0;
}

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值