子曰:"三人行, 必有我师焉. 择其善者而从之, 其不善者而改之."
本题给定甲, 乙, 丙三个人的能力值关系为: 甲的能力值确定是 2 位正整数; 把甲的能力值的 2 个数字调换位置就是乙的能力值; 甲乙两人能力差是丙的能力值的 X 倍; 乙的能力值是丙的 Y 倍. 请你指出谁比你强应 "从之", 谁比你弱应 "改之".
输入格式:
输入在一行中给出三个数, 依次为: M(你自己的能力值),X 和 Y. 三个数字均为不超过 1000 的正整数.
输出格式:
在一行中首先输出甲的能力值, 随后依次输出甲, 乙, 丙三人与你的关系: 如果其比你强, 输出 Cong; 平等则输出 Ping; 比你弱则输出 Gai. 其间以 1 个空格分隔, 行首尾不得有多余空格.
注意: 如果解不唯一, 则以甲的最大解为准进行判断; 如果解不存在, 则输出 No Solution.
输入样例 1:
48 3 7
输出样例 1:
48 Ping Cong Gai
输入样例 2:
48 11 6
输出样例 2:
No Solution
题解: 显然甲的成绩只有不到 100 种可能, 稍微注意一下数学规律开始暴力计算, 这道题要注意三个点
1. 丙的成绩不一定是正整数, 有可能是浮点数.
2. 虽然题目写的组成甲能力的两个数为正整数, 但是其实第二位有可能为 0, 需要特别注意一下.
3. 计算时因为可能会发生精度错误, 不能直接用 int/int, 还是使用 double 型或者 float 为宜.
代码如下:
- #include<iostream>
- #include<math.h>
- using namespace std;
- int main(){
- double a,b,c,x,y,M, output[3];
- scanf("%lf %lf %lf",&M,&x,&y);
- bool flag = false;
- for( a = 9; a> 0 ; a--){
- for( b = 9; b>= 0; b--){
- double n = (b*10+a)/y;
- if( fabs(a*10+b-b*10-a)/x == n ){
- flag = true;
- break;
- }
- }
- if(flag)
- break;
- }
- if(flag == false)
- printf("No Solution");
- else{
- output[0] = (a*10 + b);
- output[1] = (b*10 + a);
- output[2] = (output[1]/y);
- printf("%.0lf",output[0]);
- for( int i = 0; i <3; i++){
- if( output[i] < M )
- printf("Gai");
- else if( output[i] == M )
- printf("Ping");
- if( output[i]> M )
- printf("Cong");
- }
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2936809.html