PAT-乙-1088 1088 三人行 (20 分)
阿新 • • 發佈:2019-01-01
程式碼
#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的情形。