题目描述】
三个整数分别为 A,B,CA,B,C。这三个数字不会按照这样的顺序给你,但它们始终满足条件:A < B < C。为了看起来更加简洁明了,我们希望你可以按照给定的顺序重新排列它们。
【输入格式】
第一行包含三个正整数 A,B,C不一定是按这个顺序。这三个数字都小于或等于 100100。第二行包含三个大写字母 A、B 和 C(它们之间没有空格)表示所需的顺序。
【输出格式】
在一行中输出 A,B 和 C,用一个 (空格)隔开。
输入输出样例
输入
1 5 3 ABC
输出
1 3 5
输入
6 4 2 CAB
输出
6 2 4
这道题有2个难点
1、如何判断输入者给的三个字母,并按照此字母顺序排序
2、如何将输入的三个数按照A<B<C排列
排列这个问题其实比较简单
可以把这三个数存入数组,用之前讲过的冒泡排序或者选择排序进行从大到小或者从小到大的排序这里我用了最原始最暴力的方法,用三个if嵌套判断三个数大小并且赋值给A,B,C。
第二个问题解决了,那么该想想如何解决第一个问题。我这里是建立了一个数组储存输入者的ABC顺序,最后用一个循环。如果数组的第一个元素是A,就打印A,如果数组的第二个元素是B,那就打印B,依次类推。这样就能根据用户期望的顺序打印ABC
分析到此结束,上代码
#define _CRT_SECURE_NO_WARNINGS 1//取消警告
#include<stdio.h>
void change(int* a, int* b) {
int num;
num = *a;
*a = *b;
*b = num;
}
int main() {
int a, b, c;
char arr[10];
scanf("%d %d %d", &a, &b, &c);
scanf("%s", arr);
if (a > b) {
change(&a, &b);
if (b > c) {
change(&b, &c);
if (a > b) {
change(&a, &b);
}
}
}
else if (a < b) {
if (b > c) {
change(&c, &b);
if (a > b){
change(&a, &b);
}
}
}
int i = 0;
for (i = 0; i < 3; i++) {
if (arr[i] == 'A') {
printf("%d", a);
printf(" ");
}
else if (arr[i] == 'B') {
printf("%d", b);
printf(" ");
}
else if (arr[i] == 'C') {
printf("%d", c);
printf(" ");
}
}
return 0;
}
这里我先创造了一个change函数,以便我接下来用If嵌套方便数值交换。函数与函数之间稚嫩传地址,不能传数值,所以这里勇了一点读者可能不知道的知识——指针。指针相当于建立了两个函数之间的联系。最后用for循环遍历数组,找到ABC并输出即可。
友情提示,本题属于暴力解法可能不是最好的,但是想出来还算比较简单。