1088 三人行 (20 分)
子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”
本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是 2 位正整数;把甲的能力值的 2 个数字调换位置就是乙的能力值;甲乙两人能力差是丙的能力值的 X 倍;乙的能力值是丙的 Y 倍。请你指出谁比你强应“从之”,谁比你弱应“改之”。
输入格式:
输入在一行中给出三个数,依次为:M(你自己的能力值)、X 和 Y。三个数字均为不超过 1000 的正整数。
输出格式:
在一行中首先输出甲的能力值,随后依次输出甲、乙、丙三人与你的关系:如果其比你强,输出 Cong
;平等则输出 Ping
;比你弱则输出 Gai
。其间以 1 个空格分隔,行首尾不得有多余空格。
注意:如果解不唯一,则以甲的最大解为准进行判断;如果解不存在,则输出 No Solution
。
一、JAVA实现
import java.util.*;
public class Main {
static boolean judge(int n,int x,int y){
int ge = n%10;
int shi = n/10;
int b = 10*ge+shi;
int cha = b-n;
if(cha<0) cha*=-1;
if((double)cha/x==(double) b/y) return true;
return false;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int myAbility = scanner.nextInt();
int x = scanner.nextInt();
int y = scanner.nextInt();
int[] A = {99,0};
for(;A[0]>=10;A[0]--){
if(judge(A[0],x,y)) break;
}
if(A[0]<10){
System.out.println("No Solution");
System.exit(0);
}
A[1] = 10*(A[0]%10)+A[0]/10;
double bing = (double) A[1]/y;
//System.out.print(jia+" "+yi+" "+bing);
System.out.print(A[0]);
for(int i=0;i<2;i++){
if(A[i]>myAbility) System.out.print(" Cong");
else if(A[i]==myAbility) System.out.print(" Ping");
else System.out.print(" Gai");
}
if(bing>myAbility) System.out.print(" Cong");
else if(bing==myAbility) System.out.print(" Ping");
else System.out.print(" Gai");
}
}
二、C实现
#include<stdio.h>
int main()
{
int judge(int n,int x, int y);
int myAbility;
int x;
int y;
scanf("%d %d %d",&myAbility,&x,&y);
int A[2]={99,0};
for(;A[0]>=10;A[0]--){
if(judge(A[0], x, y)) break;
}
if(A[0]<10){
printf("No Solution\n");
return 0;
}
printf("%d",A[0]);
A[1]=10*(A[0]%10)+A[0]/10;
double bing = (double)A[1]/y;
for(int i=0;i<2;i++){
if(A[i]>myAbility) printf(" Cong");
else if(A[i]==myAbility) printf(" Ping");
else printf(" Gai");
}
if(bing>myAbility) printf(" Cong");
else if(bing==myAbility) printf(" Ping");
else printf(" Gai");
return 0;
}
int judge(int n, int x, int y){
int b = 10*(n%10)+n/10;
int cha=b-n;
if(cha<0) cha*=-1;
if((double)cha/x==(double)b/y) return 1;
else return 0;
}
如果不考虑丙可能为小数,18分