原题如下:
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?
输入格式:
输入在一行中给出小于100的正整数n。
输出格式:
在一行中按格式y.f
输出该支票的原始面额。如果无解,则输出No Solution
。
输入样例1:
23
输出样例1:
25.51
输入样例2:
22
输出样例2:
No Solution
该题其实很简单,就是用了一个穷举法,问题的关键在于需要知道f和y的取值范围,由于是f分和y分,因此f和y都是小于100的,试想,银行出纳员会给你100分或者大于100分的分值吗?肯定会兑换成元的,所以可以确定的是:
0<= f < 100
0<= y < 100
知道了具体的f和y的范围,再来求正整数解就变得异常简单了!(博主在做这道题的时候就没有看到f和y的范围,导致耽误了很长的时间仍不得其解,恕博主nev了……)
上代码:
#include <stdio.h>
int main()
{
int n, y, f, flg = 0;
scanf("%d", &n);
for (y = 0; y < 100; y++)
{
for (f = 0; f < 100; f++)
{
if (98 * f - 199 * y == n)
{
printf("%d.%d\n", y, f);
flg = 1;
}
}
}
if(flg == 0)
printf("No Solution\n");
return 0;
}