[题目描述]
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?
[解题思路]
我是利用花去n分之后还剩下2y元2f分,列出等式98=3*y+n,然后测试点0不通过,还没有想明白!
终于这道题通过了,这次不再利用上面列出的等式,而是采用双层循环进行计算,根据题意很容易知道f元y分-n分=2y元2f分,外层循环变量用y,内层循环变量用f,由题意f小于等于100,那么y小于等于50,可是为什么f不是小于等于50呢?
[代码]
// 这是错误代码
#include <stdio.h>
int main(){
int n; scanf("%d", &n);
if ((98-n) % 3 == 0){
int y = (98-n) / 3;
int f = 2 * y + 1;
printf("%d.%d\n", y, f);
}
else
printf("No Solution\n");
return 0;
}
// 这是正确代码
#include <stdio.h>
int main(){
int n; scanf("%d", &n);
int y, f;
for (y=0; y<=50; y++){
for (f=0; f<=100; f++)
if (100*f+y-n == 200*y+2*f){
printf("%d.%d\n", y, f);
return 0;
}
}
printf("No Solution\n");
return 0;
}
之后又做这道题目。 y和f的范围都是从0开始,注意这里哦~
#include <stdio.h>
int main(){
int n, y, f, flag = 0;
scanf("%d", &n);
for (y=0; y<100; y++){
for (f=0; f<100; f++){
if (200*y+2*f+n == 100*f+y){
flag = 1;
break;
}
}
if (1 == flag){
printf("%d.%d", y, f);
break;
}
}
if (0 == flag){
printf("No Solution");
}
return 0;
}