算法设计-排序与检索
LYoGa
这个作者很懒,什么都没留下…
展开
-
c语言快速排序的库函数整理
以下所介绍的所有排序都是从小到大排序 快速排序的库函数都包含在头文件名为中 对int型数组排序 int num[100]; int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } int main() { ...... qsort(num,100,sizeof(num[0]),cmp)转载 2013-08-12 14:49:04 · 3509 阅读 · 0 评论 -
UVA10487
题意:给出一组数组a,再给出另一组数组b,求数组b中的各个元素,离数组a中随意两个元素相加的和最接近的那个元素 思路:先将数组a中出现的两者和求出,然后用二分查找 #include #include #include #include #include #define N 5001500 using namespace std; int a[N], c[N];原创 2013-11-19 20:58:29 · 803 阅读 · 0 评论 -
UVA10134- Solve It
题意:给出一个方程式,要求求出x 思路:用二分查找x,当方程式得出的数为0时,跳出循环 #include #include #include using namespace std; int p, q, r, s, t, u; const double e = exp(1); double deal(double x) { return p原创 2013-11-01 21:52:51 · 621 阅读 · 0 评论 -
HDU1013
题意 + 思路:将一个多位数,各个数字相加,如果相加后还是多位数的话,再次将各个位置上的数相加,直到相加后的数为个位数 #include #include int chang(int n) { int m = 0; while (n != 0) { m += n % 10; n = n / 10; } return m原创 2013-11-01 21:59:21 · 678 阅读 · 0 评论 -
UVA10763
题意:可以想象成数字的交换,然后最后判断是否有相换的数字是否有在换回来 思路:可以用一个数组模拟,没输入一组数据,就交换一次,最后判断是否有按原先的顺序排列 #include #include #include using namespace std; #define N 500005 int arr[N]; void init() { for (int i = 0; i原创 2013-10-24 21:15:22 · 1021 阅读 · 0 评论 -
UVA10905
题意:给出n个数字,然后组合,使其组合而成的数字为最大 思路:用sort排序,重点是cmp函数,相当与两个字符串组合,比较组合而成后的大小 #include #include #include #include #define N 55 using namespace std; string s[N]; int cmp(const string & a, const string原创 2013-10-24 21:10:36 · 631 阅读 · 0 评论 -
HDU4287- Intelligent IME
题意:输入n,m,n个目标数,m个匹配数,求出每个目标数与匹配数相同的个数,没有的话为0 思路:排序检索题,,可以把字符串转化为整数,然后再检索是否相同 #include #include int change[] = {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9}; int mai原创 2013-08-14 21:15:07 · 745 阅读 · 0 评论 -
UVA156
题意:给一些字符串,要求输出不管字符串重新任何排序,都不会出现与其他字符串重复的字符串 思路:我想说我刚开始写的时候,测试数据全过了,但不知到哪里出错。。一直WA。。于是走上了重写的道路。。。 重写的就是,先将输入的所有字符串进行字典序排序,然后将字符串全部转化为小写记录在另一个数组。之后将每个字符串再重新排序,再进行比较。最后输出从未重复的 #include #i原创 2013-08-12 20:53:22 · 1150 阅读 · 0 评论 -
UVA299
题意:求交换的次数 思路:冒泡,每换一次+1,水题。。。。 #include #include int arr[55]; int main(){ int a, n, m, temp; scanf("%d", &a); while (a--){ scanf("%d", &n); memset(arr, 0, sizeof(arr)); m = 0; for (i原创 2013-08-12 20:46:43 · 744 阅读 · 0 评论 -
UVA152-Tree's a Crowd
题意:求各棵树到其他树的最短距离,然后记录下来,距离只有0-9 思路:暴力把。。。直接搜索,但要记住,最后的距离是向下取整,而不是向上取整,刚开始理解错误,用ceil取整距离,WA了好多次,后来才发现,直接用int强制转化 #include #include #include #include int dis[11]; struct space{ double x, y, z;原创 2013-08-12 20:45:42 · 821 阅读 · 0 评论 -
UVA10474-Where is the Marble?
水题。。。不过要注意输出格式。。。 #include #include #include #define N 10050 using namespace std; int a[N], b[N]; int main(){ int n, m, t = 0, flag; while(scanf("%d%d", &n, &m) == 2 && (m || n)){ memset(a, 0, s原创 2013-08-12 20:39:44 · 737 阅读 · 0 评论 -
UVA10420-List of Conquests
思路:只需比较前面国家的名称就行了,记得要排序完再进行下一步操作,这样比较方便!!!!! #include #include #include using namespace std; char cname[2005][80]; char pname[2005][80]; int compare(const void *a, const void *b){ return strcmp((c原创 2013-08-12 20:37:11 · 808 阅读 · 0 评论 -
UVA10785
题意:奇数位置放元音字母,偶数位置放辅音字母,每个元音字母使用不超过21次,辅音不超过5次 思路:将元音字母和辅音字母分开两个数组,然后进行排序,之后在交错输出 #include #include #include using namespace std; #define N 250 const char x[] = "AUEOI"; const char y[] = "JSBKTCLDMV原创 2013-08-12 21:03:43 · 732 阅读 · 0 评论 -
UVA10194
思路:模拟题。。不过有些麻烦。。 排名规则要处理好,特别是最后两条,前一个是场次少的排在前面,后面一个是要按字典序排列,不分大小写。。。我就是在这个地方WA了好多次。。。。无奈。。 #include #include #include #include struct Team{ Team(){ point = 0; play = 0; win =原创 2013-08-12 20:59:47 · 720 阅读 · 0 评论 -
UVA400
思路:麻烦在于输出的格式,lamx 为字符串中最长的,所以c = 62 / (lmax + 2), r = (n - c + 1) / c; #include #include #include char s[105][105]; int cmp_str(void const *a, void const *b){ return strcmp((char *)a, (char *)b)原创 2013-08-12 20:56:26 · 973 阅读 · 0 评论 -
UVA10057-A mid-summer night's dream.
题意:给出一串数字,找出一个最小值,使得这个数和其他数的绝对值之和为最小 思路:先排序,找出中位数,如果序列的个数为奇数使,最小值为中间那个,即n / 2 位置的那个数,而为偶数是,那个数就在n / 2 -1 与 n / 2 位置之间的数 输出的三个数,分别为最小值A,n个数中能得到绝对值之和为最小的数的个数,以及可以满足A的整数的个数 #include #include #incl原创 2013-11-10 21:20:18 · 696 阅读 · 0 评论