XTU OJ 1381表格
表格
题目描述
用户输入一个表格的文本,请按如下格式输出:
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 p[22][22][22] = {0};
int maxlen[22] ={0};
int vis[22] = {0};
int lenarr[22][22] ={0};
void prfplus(){printf("+");
}
void prfjian(int len){prfplus();for(int i = 0;i<len;i++)printf("-");
}
void prfshu(){printf("|");
}
void prfspace(int len){//for(int i = 0;i<len;i++)printf(" ");
}
void prfmap(int c){//i是第几行上面的线,c是有多少列for(int j = 0;j<c;j++){//j是第几列prfjian(maxlen[j]+2);//打印减号同时打印加号}prfplus();//补齐末尾加号
}int main(){int t;scanf("%d",&t);while(t--){memset(p,0,sizeof(p));memset(maxlen,0,sizeof(maxlen));memset(vis,0,sizeof(vis));memset(lenarr,0,sizeof(lenarr));//这道题的我半天不过的原因就是没有初始化int r,c;char ch;scanf("%d %d",&r,&c);getchar();//这里加getchar()就没有问题for(int i = 0;i<c;i++){//getchar();这里加getchar()也会有问题//之后会退不出输入程序scanf("%c",&ch);if(ch=='l'){vis[i] = 1;//为什么此时i变为1了?,一定记得在前面加getchar();//是不是跳过了i=0的情况}//某一列的对齐情况if(ch=='c'){vis[i] = 2;}if(ch=='r'){vis[i] = 3;}}//每一列的对齐情况for(int i = 0;i<r;i++){for(int j = 0;j<c;j++){scanf("%s",p[i][j]);//这里为什么可以用%s可以呢//而不用那种可以输入带空格的字符串//注意我们这里是三维数组//第三个空代表一个单词,输入单词按空格后就代表//这一个单词输入完了int len = strlen(p[i][j]);lenarr[i][j] = len;//储存每个字符的长度if(len>=maxlen[j]){maxlen[j] = len;}}}for(int i = 0;i<r;i++){prfmap(c);//打印前面的线printf("\n");for(int j = 0;j<c;j++){prfshu();//打印竖线if(vis[j]==1){int left = 1;prfspace(left);for(int k = 0;k<lenarr[i][j];k++){printf("%c",p[i][j][k]);}int right = maxlen[j]+2-left-lenarr[i][j];prfspace(right);}if(vis[j]==2){//根据字符长度和最大长度来确定空格 int left = (maxlen[j]+2-lenarr[i][j])/2;//利用c语言向下取整的性质满足题意;prfspace(left);for(int k = 0;k<lenarr[i][j];k++){printf("%c",p[i][j][k]);}int right = maxlen[j]+2-lenarr[i][j]-left;prfspace(right);}if(vis[j]==3){int right = 1;int left = maxlen[j]+2-lenarr[i][j]-right;prfspace(left);for(int k = 0;k<lenarr[i][j];k++){printf("%c",p[i][j][k]);}prfspace(right);}}prfshu();printf("\n");}prfmap(c);printf("\n");}
}
XTU OJ 1381表格相关推荐
- XTU OJ 1324 Hash
XTU OJ 1324 Hash Hash 题目描述 H a s h Hash Hash是一种很常用的数据结构,Hash技术的关键在于Hash函数的选取. 一种常用整数的 H a s h Hash H ...
- XTU OJ 1375 Fibonacci
XTU OJ 1375 Fibonacci 题目描述 小明非常喜欢FibonacciFibonacciFibonacci数列,数列为 f1=1,f2=2,fn=fn−1+fn−2f_1=1,f_2=2 ...
- XTU OJ 1355 Euler‘s Totient Function(欧拉函数)
XTU OJ 1355 Euler's Totient Function(欧拉函数) 题目描述 对于整数n,定义ϕ(n)ϕ(n)ϕ(n)为小于或等于n,并与n互质的整数的个数,比如6,比它小的和它互质 ...
- 质因数分解唯一定理(XTU OJ)
今年的oj 很有几道题用到了,这里介绍一下 质因数分解(唯一分解定理) 基本概念: 每个合数都可以写成几个质数相乘的形式,其中每个质数都是这个合数的因数,叫做这个合数的分解质因数. 分解质因数只针对合 ...
- XTU Oj 128
Rotate 题目描述 一个4×4的矩阵,我们可以把矩阵看成内外两圈,我们可以把外圈按顺时钟或者逆时钟转动,每次转动90度. 我们想得到一个2×2的子矩阵,使得这个子矩阵4个元素的累加和最大.请问最大 ...
- XTU OJ 1359 字符频度
淦啊,好久不写memset都忘记怎么写了,调了半天QAQ #include<stdio.h> #include<string.h> char a[1005]; int alp[ ...
- xtu oj 1375斐波纳契
题目描述 小明非常喜欢斐波纳契数列,数列为f1=1,f2=2,fn=fn−1+fn−2.小明想知道对于一个整数n,使得n=fi+fj+fk的组合有多少种?比如5=1+1+3或者5=1+2+2,有2种. ...
- 【算法学习笔记】64. 枚举法 SJTU OJ 1381 畅畅的牙签
枚举法就好了,推理很麻烦,感觉也做不出来. 创造一个结构体,一个是真实的数,一个是花费的牙签数. 构建一位数,两位数,三位数即可. #include <iostream> #include ...
- XTU—OJ 1258矩阵
矩阵 题目描述 编写一个程序,将1~n2按行依次填入n×n的矩阵,执行若干条行或者列的循环移动的指令,再将数字按行依次取出. 指令如下: 指令 含义 L x y x行循环左移y次 R x y x行循环 ...
最新文章
- 5.15 pymysql 模块
- java 10新_【Java基础】Java10 新特性
- Spring MVC 环境搭建(一)
- Redis在持久化时产生的延迟
- 数据采集工具flume
- matplotlib的colorbar自定义刻度范围
- Java基础学习总结(118)——单元测试的必要性和重要性
- Flutter基础—常用控件之容器
- node-amqp 使用fanout发布订阅rabbitmq消息
- $bzoj1079-SCOI2008$ 着色方案 $dp$
- 决策树系列(一)——基础知识回顾与总结
- jQuery使用规范总结
- PPT怎么切换不同的母版
- 1024网易程序员节,最上头的爱,给最好的你!
- cf1111d(退背包)
- MySql报1205:1205 - Lock wait timeout exceeded; try restarting transaction,出现1205如何解决
- git分支合并、撤销;git修改已push的commit信息; git 撤销操作;
- spss菜单小介绍【跟阿婷一起学spss 03 在入坑边缘疯狂试探】
- 360浏览器模拟百度搜索引擎蜘蛛访问
- 深入浅出的分析 TreeMap