0
点赞
收藏
分享

微信扫一扫

1037 在霍格沃茨找零钱(附详细注释,逻辑分析)


写在前面

  • 实现思路
  • 进制常量定义​​const int​
  • ​scanf​​读取方式
  • 统一进制计算,结果进制转换
  • 题目较简单,10分钟a题
  • 无废话多说
  • 参考优化后代码

测试用例

input:
10.16.27 14.1.28
output:
3.2.1

input:
14.1.28 10.16.27
output:
-3.2.1

ac代码

  • ​统一进制后计算​

#include <iostream>
using namespace std;
int main()
{
int g, s, k, k2, g2, s2, r = 17*29;

scanf("%d.%d.%d %d.%d.%d", &g,&s,&k, &g2,&s2,&k2);
long long p = g*r + s*29 + k,a = g2*r + s2*29 + k2, pa = abs(p-a);

int rg = pa/r,
rs = (pa%r)/29,
rk = pa%29;
if(a>=p) printf("%d.%d.%d", rg, rs, rk);
else printf("-%d.%d.%d", rg, rs, rk);

return 0;
}

  • 优化后代码(算法笔记)
  • ​统一进制后计算​

#include <iostream>
using namespace std;
const int G = 17 * 29;
const int S = 29;
int main()
{
int g, s, k, k2, g2, s2;
scanf("%d.%d.%d %d.%d.%d", &g,&s,&k, &g2,&s2,&k2);
long long p = g*G + s*S + k,a = g2*G + s2*S + k2, pa = abs(p-a);
int rg = pa/G,
rs = (pa%G)/S,
rk = pa%S;
if(a>=p) printf("%d.%d.%d", rg, rs, rk);
else printf("-%d.%d.%d", rg, rs, rk);
return 0;
}

学习代码

  • 1037. 在霍格沃茨找零钱(20)-PAT乙级真题
  • ​计算中引入进制​

#include <iostream>
using namespace std;
int main() {
int a, b ,c, m, n, t, x, y, z;
scanf("%d.%d.%d %d.%d.%d",&a, &b, &c, &m, &n, &t);
if (a > m || (a == m && b > n) || (a == m && b == n && c > t)) {
swap(a, m); swap(b, n); swap(c, t);
printf("-");
}
z = t < c ? t - c + 29 : t - c;
n = t < c ? n - 1 : n;
y = n < b ? n - b + 17 : n - b;
x = n < b ? m - a - 1 : m - a;
printf("%d.%d.%d", x, y, z);
return 0;
}


举报

相关推荐

0 条评论