其他分享
首页 > 其他分享> > 1037 在霍格沃茨找零钱 (20 point(s))

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