pta乙级1037在霍格沃兹找零钱

pta乙级1037在霍格沃兹找零钱_第1张图片

pta乙级1037在霍格沃兹找零钱_第2张图片

思路:
1.输入6个数字分别代表钱币

2.从西可开始比较,如果要付的比实际付的多,向前面借位,but!!!此处要注意,如果纳特为0,借位之后变成-1是不可以的,所以这种情况还要继续向加隆借位。如果加隆减完之后为负数,就直接输出。

注意:此处加隆可以是10的7次方,建议用long long int

#include
using namespace std;
int main()
{
	long long int a=0,b=0,c=0,d=0,e=0,f=0;
	char ch[20]; 
	cin>>a>>ch[0]>>b>>ch[1]>>c>>d>>ch[2]>>e>>ch[3]>>f;
    if(f>=c) c=f-c;
    if(f=b) b=e-b;
	if(e

pta乙级1037在霍格沃兹找零钱_第3张图片

错因分析:钱不够时输出的是负数,指三位数都是欠的钱,而在我的代码中,我只有加隆那一位代表缺的钱。


我发现错误不止一个。

1.b和c在运算过程中发生了改变,这时候不能用两个if,应该用if和else if来确保两个指令不会都执行。

2.针对之前的问题,再分个类就好了,很简单。

#include
using namespace std;
int main()
{
	long long int a=0,b=0,c=0,d=0,e=0,f=0;
	char ch[20]; 
	cin>>a>>ch[0]>>b>>ch[1]>>c>>d>>ch[2]>>e>>ch[3]>>f;
	if(d*17*29+e*29+f>=a*17*29+b*29+c)
	{
		if(f>=c) c=f-c;
	    else if(f=b) b=e-b;
		else if(e=f) c=c-f;
	    else if(f>c)
	    {
	    	c=c-f+29;
	    	b--;
		}
		if(b>=e) b=b-e;
		else if(e>b)
		{
			b=b-e+17;
		    a--;
		}
		a=d-a;
		cout<

搞定!!

pta乙级1037在霍格沃兹找零钱_第4张图片

 

你可能感兴趣的:(c++)