1037 在霍格沃茨找零钱 (20 分)

题目链接:1037 在霍格沃茨找零钱 (20 分)

 

这道题目刚开始用了一个很笨的方法,后来觉得太low,于是上网借鉴

方法一(代码1):

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 int a,b,c,a1,b1,c1;
 5 bool cmp(void)
 6 {
 7     if(a!=a1)
 8         return a<a1;
 9     if(b!=b1)
10         return b<b1;
11     if(c!=c1)
12         return c<c1;
13     return true;
14 }
15 int main()
16 {
17     
18     scanf("%d.%d.%d %d.%d.%d",&a,&b,&c,&a1,&b1,&c1);
19     int a2,b2,c2;
20     bool sign=cmp();//false为-,true为+ 
21     if(!sign)
22     {
23         if(c>=c1)
24             c2=c-c1;
25         else
26         {
27             c2=c-c1+29;
28             b--;
29         }
30         if(b>=b1)
31             b2=b-b1;
32         else
33         {
34             b2=b-b1+17;
35             a--;
36         }
37         a2=a-a1;
38         cout<<"-"<<a2<<"."<<b2<<"."<<c2<<endl; 
39     }
40     else
41     {
42         if(c1>=c)
43             c2=c1-c;
44         else
45         {
46             c2=c1-c+29;
47             b1--;
48         }
49         if(b1>=b)
50             b2=b1-b;
51         else
52         {
53             b2=b1-b+17;
54             a1--;
55         }
56         a2=a1-a;
57         cout<<a2<<"."<<b2<<"."<<c2<<endl;
58     }
59     
60     return 0;
61 }
62 /*
63 10.16.27
64 14.1.28
65 10.16.27
66 */
View Code

 

方法二(代码2):其实以前做时分秒时用过,但是这次没有融会贯通!

解题思路:把输入的钱数化成最小单位,即换成Knut,然后两数做差,最后再换算成Gallen.Sickle.Knut的形式。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     int a1,b1,c1,a2,b2,c2;
 7     scanf("%d.%d.%d %d.%d.%d",&a1,&b1,&c1,&a2,&b2,&c2);
 8     int P,A;    //应付和实付用最小单位
 9     P=A=0;
10     P+=(c1+(17*a1+b1)*29);
11     A+=(c2+(17*a2+b2)*29);
12     if(P>A)
13         cout<<"-";
14     int ans=abs(P-A);
15     int a=ans/17/29;
16     int b=ans%(17*29)/29;
17     int c=ans%(17*29)%29;
18     printf("%d.%d.%d\n",a,b,c);
19     return 0;
20 }

类比hh::mm:ss

注意/和%的区别 

/a/b=/(a*b) 

%a%b  !=%(a*b)

posted @ 2019-01-19 22:44  focusDing  阅读(275)  评论(0编辑  收藏  举报