PassThePAT


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

1088 Rational Arithmetic

发表于 2020-05-31

给2个有理数,分别计算它们的相加相减相乘相处后的结果,并按要求格式输出。
重点在这个格式化有理数的函数f。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <bits/stdc++.h>
using namespace std;

long long a, b, c, d;

long long GCD(long long a, long long b) {
return b == 0 ? abs(a) : GCD(b, a % b);
}

void f(long long a, long long b) {
if (a == 0) {
printf("0");
return;
}
if (b == 0) {
printf("Inf");
return;
}
int flag = (a < 0 && b > 0) || (a > 0 && b < 0);
a = abs(a), b = abs(b);
long long integer = a / b;
if (flag) {
printf("(-");
}
if (integer) {
printf("%lld", integer);
}
if (a % b == 0) {
if (flag) {
printf(")");
}
return;
}
if (integer != 0) {
printf(" ");
}
long long gcdval = GCD(a, b);
a = a - integer * b;
a = a / gcdval, b = b / gcdval;
printf("%lld/%lld", a, b);
if (flag) {
printf(")");
}
// printf("%lld/%lld%s", m, n, flag ? ")" : ""); 也很不错
}

int main() {
scanf("%lld/%lld %lld/%lld", &a, &b, &c, &d);
f(a, b);
printf(" + ");
f(c, d);
printf(" = ");
f(a * d + b * c, b * d);
printf("\n");

f(a, b);
printf(" - ");
f(c, d);
printf(" = ");
f(a * d - b * c, b * d);
printf("\n");

f(a, b);
printf(" * ");
f(c, d);
printf(" = ");
f(a * c, b * d);
printf("\n");

f(a, b);
printf(" / ");
f(c, d);
printf(" = ");
f(a * d, b * c);
printf("\n");

return 0;
}

2/3 -4/2

2/3 + (-2) = (-1 1/3)
2/3 - (-2) = 2 2/3
2/3 * (-2) = (-1 1/3)
2/3 / (-2) = (-1/3)

1087 All Roads Lead to Rome

发表于 2020-05-31

1086 Tree Traversals Again

发表于 2020-05-31

1085 Perfect Sequence

发表于 2020-05-31

1084 Broken Keyboard

发表于 2020-05-31

s2没有出现s1中的字符,并且转换大写后没有出现在答案中(答案不用重复出现相同),把这个字符加入答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;

int main() {
string s1, s2, res;
cin >> s1 >> s2;
for (int i = 0; i < s1.length(); i++) {
if (s2.find(s1[i]) == string::npos && res.find(toupper(s1[i])) == string::npos) {
res += toupper(s1[i]);
}
}
cout << res << endl;

return 0;
}

7_This_is_a_test
_hs_s_a_es

7TI

1083 List Grades

发表于 2020-05-31

因为保证每个人的grade不同,所以从高到低排序就可以,不用考虑相同的情况。
不在区间内的,grade赋值-1,往后放,else满足条件的计数cnt++。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <bits/stdc++.h>
using namespace std;

struct student {
char name[11];
char id[11];
int grade;
};

bool cmp1(student a, student b) {
return a.grade > b.grade;
}

int main() {
int n, low, high, cnt = 0;
scanf("%d", &n);
vector<student> v(n);
for (int i = 0; i < n; i++) {
scanf("%s %s %d", &v[i].name, &v[i].id, &v[i].grade);
}
scanf("%d %d", &low, &high);
for (int i = 0; i < n; i++) {
if (v[i].grade < low || v[i].grade > high) {
v[i].grade = -1;
}
else {
cnt++;
}
}
sort(v.begin(), v.end(), cmp1);
if (cnt == 0) printf("NONE");
else {
for (int i = 0; i < cnt; i++) {
printf("%s %s\n", v[i].name, v[i].id);
}
}

return 0;
}

1082 Read Number in Chinese

发表于 2020-05-31

1081 Rational Sum

发表于 2020-05-31

每计算一次都计算分子分母的最大公约数,再约分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <bits/stdc++.h>
using namespace std;

long long gcd(long long a, long long b) {
return b == 0 ? abs(a) : gcd(b, a % b);
}

int main() {
int n;
long long a, b, suma = 0, sumb = 1, GCD;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%lld/%lld", &a, &b);
GCD = gcd(a, b);
a = a / GCD;
b = b / GCD;
suma = suma * b + a * sumb;
sumb = sumb * b;
GCD = gcd(suma, sumb);
suma = suma / GCD;
sumb = sumb / GCD;
}
long long integer = suma / sumb;
suma = suma - integer * sumb;
if (integer != 0) {
printf("%lld", integer);
if (suma != 0) {
printf(" ");
}
}
if (suma != 0) {
printf("%lld/%lld", suma, sumb);
}
if (integer == 0 && suma == 0) {
printf("0");
}

return 0;
}

1080 Graduate Admission

发表于 2020-05-31

1079 Total Sales of Supply Chain

发表于 2020-05-31

1079 Total Sales of Supply Chain (25分)

pow()函数:求x的y次方的值。
叶子节点为零售商,data保存销售商品的数量,child向量保存子节点。
DFS深度搜索查找叶子节点,累加销售额。
最后再乘以价格p。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <bits/stdc++.h>
using namespace std;

double res = 0.0, p, r;

struct node {
int data;
vector<int> child;
};

vector<node> v;

void DFS(int index, int depth) {
if (v[index].child.size() == 0) {
res += v[index].data * pow(1 + r, depth);
return;
}
else {
for (int i = 0; i < v[index].child.size(); i++) {
DFS(v[index].child[i], depth + 1);
}
}
}

int main() {
int n, k, c;
scanf("%d %lf %lf", &n, &p, &r);
r = r / 100;
v.resize(n);
for (int i = 0; i < n; i++) {
scanf("%d", &k);
if (k == 0) {
scanf("%d", &v[i].data);
}
else {
for (int j = 0; j < k; j++) {
scanf("%d", &c);
v[i].child.push_back(c);
}
}
}
DFS(0, 0);
printf("%.1f", res * p);

return 0;
}
1…789…16

e5

158 日志
5 标签
© 2022 e5
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4