赞
踩
今天在洛谷上遇到了一道很有意思的题
题目:
【题目描述】
三个整数分别为 A,B,C。这三个数字不会按照这样的顺序给你,但它们始终满足条件:A<B<C。为了看起来更加简洁明了,我们希望你可以按照给定的顺序重新排列它们。
【输入格式】
第一行包含三个正整数A,B,C,不一定是按这个顺序。这三个数字都小于或等于 100100。第二行包含三个大写字母 A、B 和 C(它们之间没有空格)表示所需的顺序。
【输出格式】
在一行中输出 A,B 和 C,用一个 (空格)隔开。
意思很简单:给你三个数分别代表ABC,但并不是第一个数就是A,第二个数是B这样的,而 A是最小的B是第二小的,而C是最大的。再给你一行字母,让你按照字母的顺序将数字输出。
题解:
所谓ABC,就是这三个数的max,mid和max,所以我们只需要将这三个数算出来就可以了。
max和min相信大家都会算,而mid则就需要一些取巧的办法了。
很简单,因为只有三个数,如果a!=max&&a!=min,那么a就是mid了,同理bc一样
需要注意的一点是:最开始的时候我将Mid函数写成了a<=max&&a>=min,导致的最直接的后果就是如果a就是最大值或最小值的话那就不会进行比较,函数直接返回a,导致结果错误。
最后上代码
- #include <iostream>
- using namespace std;
-
- int Max(int a, int b, int c)
- {
- int d = a > b ? a : b;
- return c > d ? c : d;
- }
- int Min(int a, int b, int c)
- {
- int d = a < b ? a : b;
- return c < d ? c : d;
- }
- int Mid(int a, int b, int c)
- {
- int max = Max(a, b, c);
- int min = Min(a, b, c);
- if (a != min && a != max)
- {
- return a;
- }
- if (b != min && b != max)
- {
- return b;
- }
- if (c != min && c != max)
- {
- return c;
- }
- }
- int main()
- {
- int a, b, c;
- cin >> a >> b >> c;
- int max = Max(a, b, c);
- int min = Min(a, b, c);
- int mid = Mid(a, b, c);
- char ch[3];
- for (int i = 0; i < 3; i++)
- {
- cin >> ch[i];
- }
- for (int i = 0; i < 3; i++)
- {
- if (ch[i] == 'A')
- {
- cout << min<<" ";
- }
- if (ch[i] == 'B')
- {
- cout << mid << " ";
- }
- if (ch[i] == 'C')
- {
- cout << max << " ";
- }
- }
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。