2021年下学期《C语言程序设计》作业4-循环结构2
Description | ||
题目描述 求方程 (x+a)/(x+b) = c的非负整数根,其中a,b,c都是非负整数。 输入 第一行是一个整数K,表示样例的个数(K≤30000)。以后的K行每行为以一个样例,包含三个非负整数a,b,c (a,b,c ≤ 109)。 输出 每行输出一个样例的结果。如果方程没有根,输出“None”,否则输出根的值,如果存在多个根,输出最小的那个。 |
这个题的难点在于分情况讨论。
我们可以很轻松的得到解X的公式x=(a-c*b)/(c-1)。
但是,使用这个公式的前提为(x+b)!=0&&c!=1 。
所以可以依据c是否为1进行讨论。
#include<stdio.h> //坑
#include<math.h> //坑
#include<algorithm>
#include<cstring>
using namespace std;
int main(){
unsigned int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(c!=1){
int x=(a-c*b)/(c-1);
if(x+b!=0&&(a-c*b)%(c-1)==0&&x>=0) printf("%d\n",x);//要满足题给条件
else printf("None\n");
}
//讨论当c为1的情况
else if(a==b){
if(b!=0) printf("0\n");
else printf("1\n"); //分母不能为0
} else printf("None\n"); //c=1时,如果分子分母不相等则无解
}
}