[COCI2006-2007#2] ABC
题面翻译
【题目描述】
三个整数分别为 $A,B,C$。这三个数字不会按照这样的顺序给你,但它们始终满足条件:$A < B < C$。为了看起来更加简洁明了,我们希望你可以按照给定的顺序重新排列它们。
【输入格式】
第一行包含三个正整数 $A,B,C$,不一定是按这个顺序。这三个数字都小于或等于 $100$。第二行包含三个大写字母 $A$、$B$ 和 $C$(它们之间没有空格)表示所需的顺序。
【输出格式】
在一行中输出 $A$,$B$ 和 $C$,用一个
(空格)隔开。
感谢 @smartzzh 提供的翻译
样例 #1
样例输入 #1
样例输出 #1
样例 #2
样例输入 #2
样例输出 #2
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
| #include <stdio.h>
void recursiveSort(int num[], int start, int size) { int i, minIndex, temp; if (start >= size - 1) { return; } minIndex = start; for (i = start + 1; i < size; i++) { if (num[i] < num[minIndex]) { minIndex = i; } } if (minIndex != start) { temp = num[start]; num[start] = num[minIndex]; num[minIndex] = temp; } recursiveSort(num, start + 1, size); }
int main() { int num[3],var; char order[4]; printf("输入三个数字,以空格区分\t[例:1 2 3]\n"); scanf("%d%d%d",&num[0],&num[1],&num[2]); printf("输入三个字母,例: ABC\t[例:1 2 3]\n"); scanf("%s", order); recursiveSort(num, 0, 3); for(var = 0;var<3;var++) { if(order[var] == 'A' || order[var] == 'a') { printf("%d\t", num[0]); } else if(order[var] == 'B' || order[var] == 'b') { printf("%d\t", num[1]); } else if(order[var] == 'C' || order[var] == 'c') { printf(%d\t", num[2]); }
} return 0; }
|
思路解析
1、利用递归函数对我们数字数组进行排序
2、遍历我们输入的字符数组,分别判断A、B、C三种情况
3、因为提前排序过了,所以只需要用if..else分别判断输出最小值、中间值、最大值
注:之所以用两个else..if,是因为预防输入不是ABC内的情况,如ABV
这个时间太长了
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
| #include <stdio.h>
void iterativeSort(int num[], int size) { int i, j, minIndex, temp; for (i = 0; i < size - 1; i++) { minIndex = i; for (j = i + 1; j < size; j++) { if (num[j] < num[minIndex]) { minIndex = j; } } if (minIndex != i) { temp = num[i]; num[i] = num[minIndex]; num[minIndex] = temp; } } } int main() { int num[3]; int var; char order[4]; scanf("%d %d %d", &num[0], &num[1], &num[2]); scanf("%s", order); iterativeSort(num, 3); for (var = 0; var < 3; var++) { if (order[var] == 'A') { printf("%d", num[0]); } else if (order[var] == 'B') { printf("%d", num[1]); } else if (order[var] == 'C') { printf("%d", num[2]); } if (var < 2) { printf(" "); } } return 0; }
|
虽然也没节省多少时间,因为之前不通过主要是因为结果集没有按空格区分,删除掉注释和提示信息(因为不用人工输入数据),缩减了代码量
但是看了一圈发现这个代码还是太臃肿了