基础编程题目集-7-19 支票面额

文章讲述了通过编程解决一个实际问题的过程,采购员兑换支票时出错,利用数学方程和编程遍历找出正确面额。作者详细描述了如何利用C语言进行暴力搜索,确定y和f的取值范围,最终找到符合条件的解或输出无解。
摘要由CSDN通过智能技术生成

一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?

输入格式:

输入在一行中给出小于100的正整数n。

输出格式:

在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution

输入样例1:

23

输出样例1:

25.51

输入样例2:

22

输出样例2:

No Solution

代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB

题解

最讨厌披着代码外衣的数学题了!!!最开始的想法是将y,f合并成一个参数,解一元一次方程即可,但是显然不行,C语言没有取小数变整数这样的操作,而且这个采购员花钱也并不是花完分再去花元,这样就无法通过解方程来算这道题。
想了半天放弃解方程转而思考直接暴力遍历y与f。但这时候y与f俩个参数遍历到多少才停又成了一个问题。还是要到方程里找答案。我们列出这个题目给出的唯一一个等式:100f+y-n=2(100*y+f)
这里注意一元等于一百分(元、角、分)。我真是太久没见过分了最开始直接当1元等于10分来算了。
将等式整理得到:98f-199y=n
题目只给出了n的范围为0<n<100,但是注意分析,银行在兑换支票时一定会化零为整,因此有隐含条件f<100。继续分析等式,由于y>=0,f>=0,f必须在>2y的情况下才能使n为正数,故而得到f的取值范围(2y<f<100),对于y有y=(98f-n)/199,因为f<100,n>0,y<(9800-0)/199,得到f和y的范围后就是两个for直接暴力找解了。

#include <stdio.h>

int main(){
  //int i=100;
//while(i--){
  int n,y,f;
  scanf("%d",&n);
  for(y=0;y<50;y++){
    for(f=2*y+1;f<100;f++){//兑换支票时,不会有大于等于100分的分出现
      if(98*f-199*y==n){
        printf("%d.%d\n",y,f);
        return 0;
      }
    }
  }
  printf("No Solution");
//printf("\n");}
  return 0;
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值