1. 首页 » 法律百科

支票的格式(用C语言实现)

今天这道题目呢,正如标题中所说的那样,就是对支票面额进行一个计算。

计算的要求也很简单:

一个采购员从银行兑换一张y元f分的支票,结果出纳员呢给错了,给反了,为f元y分。

然后采购员在用了n分之后才发现出错了,于是数了下余额,还剩下2y元2f分。

求原本他想要兑换的支票面额是多少。

用C语言实现“支票面额的计算”,基础编程由此开始(第十七节)

梳理逻辑

这道题目的逻辑其实很明确。

分别是几个关键数字,开始的y元f分,换成f元y分,用去的n分,以及最后得到的2y元2f分。

那么针对这道题目,这里的数学关系我们得先理清楚,首先,我们进行倒退,探讨一下这样的结果是如何得到的。

用C语言实现“支票面额的计算”,基础编程由此开始(第十七节)

正如我在文中所写的这样,能得到最终结果,是需要通过分情况讨论的。

分别是三种情况,第一种情况是,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);
        }
    }
}

结果测试

用C语言实现“支票面额的计算”,基础编程由此开始(第十七节)

用C语言实现“支票面额的计算”,基础编程由此开始(第十七节)

总结

总的来说,这道题目的主要难度在于如何梳理清楚这其中的数学关系,如果没有办法梳理清楚数学关系,这道题目做起来就会非常费劲,而且也非常困难,总是会漏洞百出。

声明:本文由"麦兜"发布,不代表"知识分享"立场,转载联系作者并注明出处:https://www.029ipr.com/law/162491.html