一个采购员去银行兑换一张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++ ),使得不能写入正确的值到原地址里面,才导致这样。这个小代码也算是,加深了一点印象,顺便让我用了用刚学的指针。