PassThePAT


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

1008 Elevator

发表于 2020-05-30

题目大意:
电梯的初始维持在0层,上升一层需要6秒,下降一层需要4秒,停止所花时间是4秒,问走完所给楼层需要多少时间。
往上是6秒/层,往下是4秒/层,每到一层要停5秒。第一个数字输入的是从0开始开门的次数。然后依次输入n个数计算即可。

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

int main() {
int n, sum = 0, now = 0, floor;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> floor;
if (floor >now)
sum += (floor - now) * 6;
else
sum += (now - floor) * 4;
sum += 5;
now = floor;
}
cout << sum << endl;

return 0;
}

1007 Maximum Subsequence Sum

发表于 2020-05-30

题目大意:
输出最大子序列和,以及首尾元素。

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
#include <bits/stdc++.h>
using namespace std;

int main() {
int len;
scanf("%d", &len);
int num[len + 1];
int left = 0, right = len - 1, temp = 0, tempIndex = 0, sum = -1;
for (int i = 0; i < len; i++) {
scanf("%d", &num[i]);
temp += num[i];
if (temp < 0) {
temp = 0;
tempIndex = i + 1;
} else if (temp > sum) {
sum = temp;
left = tempIndex;
right = i;
}
}
if (sum < 0) sum = 0;
printf("%d %d %d\n", sum, num[left], num[right]);

return 0;
}

10
-10 1 2 3 4 -5 -23 3 7 -21

10 1 4

由于In case that the maximum subsequence is not unique, output the one with the smallest indices i and j (as shown by the sample case). 上面的temp要大于sum才更新。

1006 Sign In and Sign Out

发表于 2020-05-30

题目大意:
告诉你M个工作人员的出入记录,最早进门的人负责开门,最晚出门的负责关门。
请问,谁开的门和谁关的门。

总体思想是把所有人的进出时间统一到一个可以比较的刻度上,比如,进出时间是当天的第几秒。
之后用2个临时变量保存当前着的进出时间和最早和最晚比,更新最早和最晚时间。
输出最后结果。

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
#include <bits/stdc++.h>
using namespace std;

int f(int h, int m, int s) {
return h * 3600 + m * 60 + s;
}

int main() {
int M, minIN = INT32_MAX, maxOUT = INT32_MIN;
scanf("%d", &M);
string unlocked, locked;
for (int i = 0; i < M; i++) {
string p;
cin >> p;
int h1, m1, s1, h2, m2, s2;
scanf("%d:%d:%d %d:%d:%d", &h1, &m1, &s1, &h2, &m2, &s2);
int tempIN = f(h1, m1, s1);
int tempOUT = f(h2, m2, s2);
if (tempIN < minIN) {
unlocked = p;
minIN = tempIN;
}
if (tempOUT > maxOUT) {
locked = p;
maxOUT = tempOUT;
}
}
cout << unlocked << " " << locked << endl;

return 0;
}



3
CS301111 15:30:28 17:00:10
SC3021234 08:00:00 11:25:25
CS301133 21:45:00 21:58:40

SC3021234 CS301133

1005 Spell It Right

发表于 2020-05-30

题目大意:
输入一个数字,把数字的每一位相加,用英文输出最后总和的每一位数字。
因为输入的数字可能很大,所以用字符串的形式输入。即使每一位是9,和也不过是900罢了。
之后转换为字符串,输出每一位的数字。

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

int main() {
string str;
cin >> str;
int sum = 0;
for (int i = 0; i < str.length(); i++)
sum += (str[i] - '0');
string s = to_string(sum);
string digits[10] =
{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
cout << digits[s[0] - '0'];
for (int i = 1; i < s.length(); i++) {
cout << " " << digits[s[i] - '0'];
}

return 0;
}


12345
one five

1004 Counting Leaves

发表于 2020-05-30

1003 Emergency

发表于 2020-05-30

1002 A+B for Polynomials

发表于 2020-05-30

相同次数的系数合并,统计系数不为0的项,输出。
a[exp] += num; 比如a[2]也就是x的平方的系数。exp = 0也就是常数项。
因为没有说同一行输入不会出现相同次数的项,因此要+=,当然+=也能很好地处理系数不同的问题。

求8x²-7x+5与3x²-4x+1的差。
解: (8x²-7x+5)-(3x²-4x+1)
=8x²-7x+5-3x²+4x-1
=5x²-3x+4

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
#include <bits/stdc++.h>
using namespace std;

int main() {
int k1, k2, exp;
float num, a[1001] = {0.0};
scanf("%d", &k1);
while (k1--) {
scanf("%d%f", &exp, &num);
a[exp] += num;
}
scanf("%d", &k2);
while (k2--) {
scanf("%d%f", &exp, &num);
a[exp] += num;
}
int cnt = 0;
for (int i = 1000; i >= 0; i--) {
if (a[i]) cnt++;
}
printf("%d", cnt);
for (int i = 1000; i >= 0; i--) {
if (a[i])
printf(" %d %.1f", i, a[i]);
}

return 0;
}


2 1 2.4 0 3.2
2 2 1.5 1 0.5
3 2 1.5 1 2.9 0 3.2

1001 A+B Format

发表于 2020-05-30

题目要求:
计算A+B的和,以每三位一个”,”的格式输出。
用s数组记录每3位的数字,然后按照格式输出。

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
#include <bits/stdc++.h>
using namespace std;

int main() {
int a, b, sum = 0;
cin >> a;
cin >> b;
sum = a + b;
if (sum == 0) printf("0\n");
else {
if (sum < 0) {
printf("-");
sum = -sum;
}
int s[10], index = 0;
while (sum) {
s[index++] = sum % 1000;
sum /= 1000;
}
printf("%d", s[--index]);
while (index) {
printf(",%03d", s[--index]);
}
printf("\n");
}
return 0;
}


-1000000 9
-999,991

还有个留着参考:
#include <iostream>
using namespace std;

int main() {
int a, b;
cin >> a >> b;
string s = to_string(a + b);
int len = s.length();
for (int i = 0; i < len; i++) {
cout << s[i];
if (s[i] == '-') continue;
if ((i + 1) % 3 == len % 3 && i != len - 1) cout << ",";
}
return 0;
}
1…1516

e5

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