PTA 乙级 1037 在霍格沃茨找零钱 (20分) C/C++
简单,怎么便利怎么来吧
我是直接按进位计算,可以全部换算成纳特进行计算,然后输出时进行换算
测试点1、3:找零为负,测试
C/C++
1 #include<iostream> 2 3 using namespace std; 4 5 typedef struct { 6 int ga, si, kn; 7 }money; 8 9 int calculate(money a, money b) { // 这里不做传址,因为若找零为负还会用到a,p,只做传值 10 money l; 11 if (a.kn >= b.kn) l.kn = a.kn - b.kn; // 纳特和西可 12 else { 13 l.kn = 29 + a.kn - b.kn; 14 a.si--; 15 } 16 17 if (a.si >= b.si) l.si = a.si - b.si; // 加隆和西可 18 else { 19 l.si = 17 + a.si - b.si; 20 a.ga--; 21 } 22 l.ga = a.ga - b.ga; 23 if (l.ga < 0) { //小于零直接退出 24 return 1; 25 } 26 else { 27 cout << l.ga << "." << l.si << "." << l.kn; 28 } 29 return 0; 30 } 31 32 int main() { 33 money p, a; 34 scanf_s("%d.%d.%d", &p.ga, &p.si, &p.kn); 35 scanf_s("%d.%d.%d", &a.ga, &a.si, &a.kn); 36 if (calculate(a, p)) { cout << "-"; calculate(p, a); } //利用函数返回值,分为找零为正为负的情况 37 return 0; 38 }
默默地一点点变强,细节决定成败