7-38 支票面额 (指针版)

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

输入样例1:

23

输出样例1:

25.51

输入样例2:

22

输出样例2:

No Solution

发现这个题和我之前做的指针笔记比较符合,也就是函数有可能会出错。可以用个小套路就是,用返回状态的函数来进行if判断,写了这个代码之后也加深了我对指针的理解。

回到这道题,它的原理也很简单就是凑,凑不出对应的值则输出

NO SOLUTION 。

凑得出就输出y.f



我的代码:

#include<stdio.h>
int check(int *y,int *f,int n);
int main(){
    int y,f,n;
    scanf("%d",&n);
    if( check( &y,&f,n) )
        printf("%d.%d",y,f);
    else
        printf("No Solution");
    
    
    return 0;
}

int check(int *y,int *f,int n)
{
	int ret=0;
	int x1,x2;
    for(x1=0;x1<100;x1++)
       	for(x2=0;x2<100;x2++){
		   
       		if(98*x1-199*x2==n)
       		{
       			*f=x1;
       			*y=x2;
       			ret=1;
       			break;
			}
		}

    return ret;
}

感想:

check函数我写的时候我一开始实际上是以*y,*f来做遍历的动作的,但是后面发现程序输出是 0.0 ,直到我使用x1,x2来做遍历,再赋值给*y,*f ,结果才正确。

一开始,我做了一个DEBUG,我发现for循环是会正常循环的,也会一遍遍判断我的IF语句,但当我使用printf,希望输出每轮循环的*f结果的时候,发现,*f只走了三轮,最后一轮的时候*f=0。细细想来,应该是我的for循环使得指针指向的地址发生了改变(*y++  /  *f++ ),使得不能写入正确的值到原地址里面,才导致这样。这个小代码也算是,加深了一点印象,顺便让我用了用刚学的指针。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值