1. 程式人生 > >PAT-乙-1088 1088 三人行 (20 分)

PAT-乙-1088 1088 三人行 (20 分)

在這裡插入圖片描述
在這裡插入圖片描述

程式碼

#include <stdio.h>
#include <math.h>

int me, x, y;

int print(double t){
	if(me==t){
		printf(" Ping");
	}
	else if(me<t){
		printf(" Cong");
	}
	else{
		printf(" Gai");
	}
}

int main() {
	
	scanf("%d %d %d", &me, &x, &y);

	for(int i=99; i>9; i--) {
		int j = i/10 + (i%10)*10;
		double k = abs(i-j)*1.0/x;
		if(k*y==j) {
			printf("%d", i);
			print(i);
			print(j);
			print(k);
			printf("\n");
			return 0;
		}
	}
	printf("No Solution\n");

	return 0;

}

註解

1、本題理解題意是關鍵。me的值是給定的,但甲乙丙的值都是未知的。甲的值是兩位數,所以遍歷兩位數,又因為Unique的時候輸出甲最大的,所以遍歷時應該從最大值到最小值遍歷,也就是甲值從99到10。確定了甲之後,乙的值很簡單,就是反轉甲的兩位數。丙的值也水到渠成,取甲乙的差然後除以x就得到了。**需要注意的是,丙的值不一定是整數!**因此要用double型別,因此被除數和除數也要變成double型別。得到甲乙丙之後,用丙的值乘上y,看看能不能得到乙的值,如果可以就符合題意,就可以準備輸出了。因為輸出是固定形式,所以把輸出包裝成一個函式print,減少重複工作。如果想不用flag作標誌,那麼就可以採用輸出後直接return 0;的形式直接退出程式。否則,如果沒有走到該分支,就是No Solution的情形。

結果

在這裡插入圖片描述