奇数排序
Time Limit(Common/Java):2000MS/6000MS Memory Limit:65536KByte
Total Submit:1217 Accepted:320
Total Submit:1217 Accepted:320
Description
给定n个正整数,对其中的奇数按递增次序排序。
Input
第一行是一个正整数:测试用例数目,最多为5。之后,每个测试用例包括两行:
l 第1行给出整数数目n,1≤n≤100000,每个整数范围为 [0,100000)
l 第2行给出n个整数
Output
对于每个测试用例:
l 输出“Case #:”,#表示序号
l 输出奇数排序后的n个整数
注意:输出部分的结尾要求包含一个多余的空行。
Sample Input
2
3
4 2 1
3
3 2 1
Sample Output
Case 1:
4 2 1
Case 2:
1 2 3
Source
算法与数据结构设计2009
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79//奇数排序——写法易超时——奇数另放一个数组且排完序不用放回去 = = #include<stdio.h> #include<stdlib.h> /* #define SWAP(x, y) {int tmp=x; x=y; y=tmp;} int main() { int ncase, n, num; int a[100000], b[100000]; scanf("%d",&ncase); for(int no=1;no<=ncase;no++) { num = 0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i] % 2 != 0) b[num++] = i; // 存放奇数的下标 } // int flag = 1; for(int i=0;i<num-1&&flag;i++) { flag = 0; for(int j=0;j<num-1-i;j++) { if(a[b[j]] > a[b[j+1]]) { SWAP(a[b[j]], a[b[j+1]]); flag = 1; } } } printf("Case %d:n",no); for(int i=0;i<n-1;i++) printf("%d ",a[i]); printf("%dn",a[n-1]); } return 0; } */ int odd[100000]; // 存放奇数 int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } int main() { int ncase, n, a[100000], num; scanf("%d",&ncase); for(int no=1;no<=ncase;no++) { num = 0; // 奇数个数 scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i] % 2 != 0) odd[num++] = a[i]; } qsort(odd, num, sizeof(odd[0]), cmp); num = 0; printf("Case %d:n",no); for(int i=0;i<n;i++) { if(i != 0) printf(" "); if(a[i] % 2 != 0) printf("%d",odd[num++]); // Here! else printf("%d",a[i]); } printf("n"); } return 0; }
最后
以上就是鳗鱼银耳汤最近收集整理的关于NOJ1110奇数排序——超时,看写法,需要较灵活的思维!的全部内容,更多相关NOJ1110奇数排序——超时,看写法,需要较灵活内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复