1 题目要求
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?
输入格式:
输入在一行中给出小于100的正整数n。
输出格式:
在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution
2 样例
输入样例1:
23
输出样例1:
25.51
输入样例2:
22
输出样例2:
No Solution
3 分析
根据题干描述,可以列出如下的式子
f.y-0.n=2(y.f)(1)
左右两边同时乘以100(因为 分币的范围是[1,100),两位数)以消去小数
100f+y-n=200y+2*f(2)
合并同类项
98f-199y=n(3)
一开始想分类讨论,根据(1)分别讨论左边减法需要借位,右边加法需要进位,分为4种情况,然后分别构建二元一次方程组。结果没过——还有待讨论
上网查别人怎么做的,又是只给代码,=(可能觉得题太简单了?)然后自己又想了一下,是通过两个循环(y,f)来表示(3)这个二元一次方程。
4 代码
第一版
找不着了…………………………
第二版
# include <stdio.h>
int main(void) {
int n=0, y=0, f=0;
int isGet=0;
scanf ("%d", &n);
for(int i=0; i<100; i++) {
for (int j=0; j<=100; j++) {
if (n == 98*i-199*j) {
f = i;
y = j;
isGet = 1;
break;
}
}
if (1 == isGet) break;
}
if (0 == isGet) {
printf("No Solution");
} else {
printf("%d.%d", y, f);
}
return 0;
}
5 总结
二元一次方程通过双循环求解
如何根据内循环条件跳出外循环
java比c占内存