支票的格式(用C语言实现)
今天这道题目呢,正如标题中所说的那样,就是对支票面额进行一个计算。
计算的要求也很简单:
一个采购员从银行兑换一张y元f分的支票,结果出纳员呢给错了,给反了,为f元y分。
然后采购员在用了n分之后才发现出错了,于是数了下余额,还剩下2y元2f分。
求原本他想要兑换的支票面额是多少。
梳理逻辑
这道题目的逻辑其实很明确。
分别是几个关键数字,开始的y元f分,换成f元y分,用去的n分,以及最后得到的2y元2f分。
那么针对这道题目,这里的数学关系我们得先理清楚,首先,我们进行倒退,探讨一下这样的结果是如何得到的。
正如我在文中所写的这样,能得到最终结果,是需要通过分情况讨论的。
分别是三种情况,第一种情况是,y减去n之后,恰好是2倍的f,而f恰好又是y的两倍,但显然,这样求得的y是负数了,所以是错误的。
第二种情况,当y小于n的时候,说明y-n小于0,那么就需要从f那边借一个1回来,换算成分的话,就是100分,那么对于第一个方程而言,就是加上一个100,而对于第二个方程而言,就是减去一个1,在这个基础上,我们还要再来进行讨论。
那就是如果加上100后,得到的值没有超过100,也就是2f没有超过100,也不需要从f那边去多借一个1过来,2y是必然不超过100,所以y就是小于等于50,那么y+100-n就是小于等于100,那么y就是小于等于n,n呢也要小于等于50。
所以要满足第二种情况,得到相应的方程组,前提条件就是n要小于等于50。
得到y=(98-n)/3和f-1=2y这样一对方程组。
同理,对于第三种情况而言,加上100后,得到的值超过了100,2f也超过了100,就需要从f那边再多借一个100回来,而f就要多减去一个2。
要满足第三种情况,得到相应的方程组,前提条件就是n要大于50。
得到y=(196-n)/3和f-2=2y这样一对方程组。
不过这边存在两个特殊情况,分别是98和2。
很显然,98是满足第二种情况的,所以我们应该把n=98的这种特殊情况给放到第二个条件判断当中去比较好。
代码实现
//支票面额
#include
int main(){
int n;
int y;
int f;
scanf("%d", &n);
if(n>100){
scanf("%d", &n);
}
if(n<=50||n==98){//第二种情况要满足n小于50
y = (98-n)/3;
f = 2*y+1;
if((98-n)%3!=0){
printf("No Solution");
}
else{
printf("%d.%d",y,f);
}
}
else{//第三种情况就是剩下的情况,或者说n大于50,但不包括98,因为是196的二分之一
y = (196-n)/3;
f= 2*y+2;
if((196-n)%3!=0){
printf("No Solution");
}
else{
printf("%d.%d",y,f);
}
}
}
结果测试
总结
总的来说,这道题目的主要难度在于如何梳理清楚这其中的数学关系,如果没有办法梳理清楚数学关系,这道题目做起来就会非常费劲,而且也非常困难,总是会漏洞百出。
声明:本文由"麦兜"发布,不代表"知识分享"立场,转载联系作者并注明出处:https://www.029ipr.com/law/162491.html