P4414 [COCI2006-2007#2] ABC
题目描述
三个整数分别为 A,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
先解读一下题意
根据题目的意思,A代表最小的数,C代表最大的数,那么B就是中间的那个数。然后要根据输入给出的ABC的顺序,输出那三个数。比如输入CAB,意思就是先输出最大的数,再输出最小的数,再输出中等的数。
解法一:略暴力
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[3];
int i,a[3];
for(i=0;i<3;i++)
{
cin>>a[i];
}
cin>>s;
sort(a,a+3);
for(i=0;i<3;i++)
{
if(s[i]=='A')
{
cout<<a[0]<<" ";
continue;
}
if(s[i]=='B')
{
cout<<a[1]<<" ";
continue;
}
if(s[i]=='C')
{
cout<<a[2]<<" ";
continue;
}
}
return 0;
}
这个解法就是逐个判断。
解法二:洛谷题解(言简意赅)
#include<iostream>
#include<algorithm>
using namespace std;
int a[3];
char A,B,C;
int main()
{
cin>>a[0]>>a[1]>>a[2];
cin>>A>>B>>C;
sort(a,a+3);
cout<<a[A-'A']<<" "<<a[B-'A']<<" "<<a[C-'A'];
//字母是大写,减去‘A’后得到0(A),1(B),2(C)。
return 0;
}
输出根本不用看字符顺序,用字符减去‘A’当下标就好了
用sort函数排序完之后,下标为0的是最小的那个,下标为2的是最大的那个。
这里两道题都用到了sort函数,无脑排序!