PTA 7-19 支票面额 简单暴力

这篇文章介绍了如何通过编程解决一个实际问题,即利用数学方程解决采购员兑换支票时出现的金额计算错误。通过for循环和逻辑判断,找到满足条件的元和分的组合,输出支票的原始面额。
摘要由CSDN通过智能技术生成

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

输入格式:

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

输出格式:

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

先看代码

#include<stdio.h>
int main(){
    int n;
    int flag=0,a,b;//flag用于判断是否找到了解,a,b用来存解
    scanf("%d",&n);
    for(int f=0;f<100;f++){//从0-99都试试呗
        for(int y=0;y<100;y++){
            if(n==(98*f-199*y)){//找到解了
                a=y;
                b=f;
                flag=1;
                break;
            }
        }
         if(flag==1) break;
    }
    if(flag==1) printf("%d.%d",a,b);
    else printf("No Solution");
    return 0;
}

这题猛一看懵懵的,这考起数学来了吗,但仔细思考一下不难发现,要输出的结果由元和分两部分组成,且都是整数,况且题目给了条件:

                                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​"原来有f元y分,用去了n分剩2y元2f分"

这不就是等式条件么,数学表达式就是:f*100+y-n=200*y+2f   化简一下就是   n=98*f-199*y

你告诉我两个未知数,一个方程,没法解?简单想一下,元和分既然都能弄反,那肯定数值不会太大,至少不会超过100(一元最多也就100分)

那还管他啥,直接暴力干就完了!!!!

关键点:

1、for循环定义的变量是局部变量,在外面不能直接使用,因此要用a,b重新储存解;

2、定义falg标志位判断是否有解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值