【题解】nyoj.996.STR
来源:互联网 发布:c51单片机 烧录器驱动 编辑:程序博客网 时间:2024/06/01 07:59
描述
给你一些字符串,你能把他们分别组合成一个字典序最大和最小的字符串吗?
输入
第一行:一个整数T,表示T组测试数据(T<=15)。接下来是一个空行。
以后每两组测试数据间均用一个空行隔开。
每组测试数据包含多行,每行包含一个字符串(串不为空,长度最大为50)。
输出
对于每组数据,输出两行,分别是组成的字典序最大和最小的字符串。
样例输入
3
ab
cd
ef998
998976
97
样例输出
efcdab
abcdef
998998
998998
97976
97697
思路与实现
nyoj上难度1 AC率却不足20%的题…
一组字符串排序问题,c直接用qsort(排序)+strcmp(字符串比较)就好了
需要注意的是不能单纯地直接调用strcmp比较,因为字符串可能不等长,而要求的是整体字符串的字典序,所以对每两个字符串的比较其实是比较这两个字符串排列出的新的字符串的字典序。
#include <stdio.h>#include <string.h>#include <stdlib.h>#define M 61char s[1001][M];int cp(const void *a, const void * b){ /*c,d用来存a,b合并后的字符串,根据题意单个字符串最大50,合并后最大可到100*/ char c[M<<1],d[M<<1]; /*将字符串a,b排列成ab存入c*/ strcpy(c,(const char*)a); strcpy(c+strlen(c),(const char*)b); /*将字符串a,b排列成ba存入d*/ strcpy(d,(const char*)b); strcpy(d+strlen(d),(const char*)a); /*比较c,d字典序*/ return strcmp((const char*)c,(const char*)d);}int main(void){ int T; scanf("%d\n",&T); for(int i,j;T--;){ for(i = 0;*gets(s[i]);i++); qsort(s,i,sizeof(s[0]),cp); /*排序*/ for(j = i;j--;printf("%s",s[j])); puts(""); for(j = 0;j<i;printf("%s",s[j++])); puts(""); } return 0;}
0 0
- 【题解】nyoj.996.STR
- STR(nyoj 996)
- nyoj 回文字符串题解
- 题解nyoj skiing
- NYOJ 三个水杯 题解
- nyoj 37 回文字符串题解
- str
- str()
- str
- str
- str
- nyoj 笨蛋的难题()二 题解
- NYOJ 412 Same binary weight题解
- NYOJ Practice-Round#2(题解)
- 博弈之nyoj 970 Yougth's Game II 题解
- NYOJ 27 水池数目(不看题解就AC,DFS)
- NYOJ水题题解-108士兵杀敌(一)
- str=str.replace("<","!");
- 37_XML DOM 解析器错误
- POJ 1815 Friendship
- 38_您已经学习了 XML DOM,现在该怎么办呢?
- 迪杰斯特拉(Dijkstra)算法求图中最短路径
- 39_XML DOM 实例
- 【题解】nyoj.996.STR
- 40_XML DOM 验证 XML 语法
- struts2注解返回json数据到android客户端
- HDU1698 Just a Hook
- 文章标题
- 01_JavaScript 教程
- 使用AS3.0开发FC超级马里奥
- BZOJ 1066 POJ 2711 [SCOI2007]蜥蜴
- oracle性能问题如何定位