紫书章五例题八 命令 UVA 400 (排序+结构体)
2017-04-04 09:12
225 查看
题意:将一些字符串按照字典从左到右,从上到下输出,假设最长的字符串长度为M,则最后一列为M个字符,其它列为M+2个字符。
这个题我用了一个结构体。然后就出现了一个存字符串的数组,为什么呢,因为如果声明一个二维数组的话,那么排序就不好用了。如果用set存的话,之后查找的话,就比较麻烦。
这个题我用了一个结构体。然后就出现了一个存字符串的数组,为什么呢,因为如果声明一个二维数组的话,那么排序就不好用了。如果用set存的话,之后查找的话,就比较麻烦。
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <cmath> #include <vector> #include <set> using namespace std; struct node { char s[65]; }; node f[105]; int vis[105];//里面存对应字符串的长度,避免重复计算 bool cmp(node a,node b) { return strcmp(a.s,b.s)<0; } int main() { int n; while(scanf("%d",&n)!=EOF) { int MAX=0,wz=0; memset(f,0,sizeof(f)); memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) { scanf("%s",f[i].s); int len=strlen(f[i].s); if(MAX<strlen(f[i].s)) MAX=strlen(f[i].s); } sort(f,f+n,cmp); int c=(60-MAX)/(MAX+2)+1; int r=(n+c-1)/c; int total=1,flag=0,h=0; for(int i=0;i<n;i++) vis[i]=strlen(f[i].s); printf("------------------------------------------------------------\n"); for(int i=0;i<r;i++){ for(int j=0;j<c;j++){//输出,按行输出 int k=j*r+i; cout<<f[k].s; int g=vis[k]; int cd=MAX+2; if(j==c-1) cd=cd-2;//最后一列MAX while(g<cd) {printf(" ");g++;} } printf("\n"); } } 4000 return 0; }
相关文章推荐
- 紫书章五例题八 命令 UVA 400 (排序+结构体)
- 紫书章五例题八 命令 UVA 400 (排序+结构体)
- 紫书章五例题八 命令 UVA 400 (排序+结构体)
- 紫书章五例题八 命令 UVA 400 (排序+结构体)
- 紫书章五例题八 命令 UVA 400 (排序+结构体)
- 紫书章五例题八 命令 UVA 400 (排序+结构体)
- 紫书章五例题八 命令 UVA 400 (排序+结构体)
- 《算法竞赛入门经典2ndEdition 》例题5-8 Unix is 命令(Unix is, Uva400)
- 例题5-8 Unix ls 命令 UVa400
- UVA400-Unix的ls命令
- 紫书章五例题六 团队队列 uva 540(queue)
- 紫书章五例题六 团队队列 uva 540(queue)
- 紫书章五例题七 丑数 UVa 136(多种方法,在这里介绍优先级队列)
- 紫书章五例题六 团队队列 uva 540(queue)
- 紫书章七例题 1——UVA 725 Division
- 紫书章五例题七 丑数 UVa 136(多种方法,在这里介绍优先级队列)
- 紫书章五例题六 团队队列 uva 540(queue)
- 紫书章五例题六 团队队列 uva 540(queue)
- 紫书章五例题七 丑数 UVa 136(多种方法,在这里介绍优先级队列)
- 紫书章七例题 1——UVA 725 Division