1037 在霍格沃茨找零钱 (20 point(s))
作者:互联网
// 未简化前代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int P[3], A[3], result[3], p, a;
char c;
cin >> P[2] >> c >> P[1] >> c >> P[0];
cin >> A[2] >> c >> A[1] >> c >> A[0];
// 判断大小
p = P[2] * 10000 + P[1] * 100 + P[0];
a = A[2] * 10000 + A[1] * 100 + A[0];
// 不够钱需要倒贴钱 输出负号
if(p > a){
cout << '-';
// 倒贴钱反过来相减
for(int i = 0; i < 3; i++){
if(P[i] < A[i]){
P[i+1]--;
if(i == 0){
P[i] += 29;
}
else if(i == 1){
P[i] += 17;
}
}
// 够钱直接相减
result[i] = P[i] - A[i];
}
}
else{
// 29 K = 1 S, 17 S = 1 G
for(int i = 0; i < 3; i++){
// 向高位借钱
// 如果高位为 0 ?
if(A[i] < P[i]){
A[i+1]--;
if(i == 0){
A[i] += 29;
}
else if(i == 1){
A[i] += 17;
}
}
// 够钱直接相减
result[i] = A[i] - P[i];
}
}
cout << result[2] << c << result[1] << c << result[0];
}
#include <bits/stdc++.h>
using namespace std;
struct Pay{
int G, S, K;
}P, A, result;
int main() {
char c;
cin >> P.G >> c >> P.S >> c >> P.K;
cin >> A.G >> c >> A.S >> c >> A.K;
// 判断大小不够钱需要倒贴钱 输出负号
if( P.G > A.G ||
P.G == A.G && P.S > A.S ||
P.G == A.G && P.S == A.S && P.K > A.K){
cout << '-';
// 交换内容
swap(P, A);
}
// 29 K = 1 S, 17 S = 1 G
if(A.K < P.K){
A.S--, A.K += 29;
}
if(A.S < P.S){
A.G--, A.S += 17;
}
result.G = A.G - P.G;
result.S = A.S - P.S;
result.K = A.K - P.K;
cout << result.G << c << result.S << c << result.K;
}
因为上下两个选择判断只是将运算对象的位置进行了互换,所以可以用 swap() 函数。但不知道为什么如果是数组用,会有一些测试点没能够正确交换。如果用结构体就没有这个问题。
不过如果实际考试的时候,如果不晓得为什么错了,像原本未精简之前直接将代码复制过来,然后改一改变量也可以,只不过代码看起来长一点,但结果上是一致的。
if(A.K < P.K){
A.S--, A.K += 29;
}
if(A.S < P.S){
A.G--, A.S += 17;
}
如果变成结构体的时候也记得遵循从低位向高位运算的顺序。否则如果没按照这顺序就会有问题。
标签:沃茨,20,cout,int,代码,cin,&&,霍格,include 来源: https://www.cnblogs.com/Atl212/p/15206374.html