Skip to content

Commit bff2cbf

Browse files
committed
B1012
1 parent b4ef87a commit bff2cbf

File tree

3 files changed

+249
-117
lines changed

3 files changed

+249
-117
lines changed
Lines changed: 99 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,75 +1,132 @@
11
/*
2-
1013 数素数 (20)(20 分)
2+
1012 数字分类(20 分)
33
4-
令P~i~表示第i个素数。现任给两个正整数M <= N <= 10^4^,请输出P~M~到P~N~的所有素数。
4+
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:
55
6-
输入格式:
6+
A​1​​ = 能被 5 整除的数字中所有偶数的和;
7+
A​2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n​1​​−n​2​​+n​3​​−n​4​​⋯;
8+
A​3​​ = 被 5 除后余 2 的数字的个数;
9+
A​4​​ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
10+
A​5​​ = 被 5 除后余 4 的数字中最大数字。
711
8-
输入在一行中给出M和N,其间以空格分隔。
12+
输入格式:
913
14+
每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。
1015
输出格式:
1116
12-
输出从P~M~到P~N~的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
17+
对给定的 N 个正整数,按题目要求计算 A​1​​~A​5​​ 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
18+
19+
若其中某一类数字不存在,则在相应位置输出 N。
20+
输入样例 1:
21+
22+
13 1 2 3 4 5 6 7 8 9 10 20 16 18
1323
14-
输入样例
24+
输出样例 1
1525
16-
5 27
26+
30 11 2 9.7 9
1727
18-
输出样例
28+
输入样例 2
1929
20-
11 13 17 19 23 29 31 37 41 43
21-
47 53 59 61 67 71 73 79 83 89
22-
97 101 103
30+
8 1 2 4 5 6 7 9 16
31+
32+
输出样例 2:
33+
34+
N 11 2 N 9
2335
24-
注意审题:是第5到第27个素数
2536
*/
37+
2638
#include <stdio.h>
2739
#include <stdlib.h>
28-
#include <math.h>
2940

41+
int isEven(int n);
3042

31-
int isPrime(int n);
32-
33-
int main ()
43+
int main()
3444
{
35-
int start, end;
36-
int i, cnt = 0, ccnt = 0;
45+
int number;
46+
int i, nList[1000];
47+
48+
int zeroCnt = 0, oneCnt = 0, twoCnt = 0, threeCnt = 0, fourCnt = 0;
49+
int evenSum = 0, oneSum, threeSum = 0, fourMax = 0;
3750

38-
if (!scanf("%d%d", &start, &end)) {
51+
if (!scanf("%d", &number)) {
3952
return EXIT_FAILURE;
4053
}
4154

42-
i = 2;
43-
44-
while (cnt < end) {
45-
if (isPrime(i)) {
46-
cnt++;
47-
if (cnt >= start) {
48-
if (ccnt % 10 == 0) {
49-
if (ccnt != 0) {
50-
printf("\n%d", i);
51-
} else {
52-
printf("%d", i);
53-
}
55+
for (i = 0; i < number; i++) {
56+
if (!scanf("%d", &nList[i])) {
57+
return EXIT_FAILURE;
58+
}
59+
}
60+
61+
for (i = 0; i < number; i++) {
62+
switch (nList[i] % 5) {
63+
case 0:
64+
if (isEven(nList[i])) {
65+
zeroCnt++;
66+
evenSum += nList[i];
67+
}
68+
break;
69+
case 1:
70+
oneCnt++;
71+
if (oneCnt % 2 == 1) {
72+
oneSum += nList[i];
5473
} else {
55-
printf(" %d", i);
74+
oneSum -= nList[i];
5675
}
57-
ccnt++;
58-
}
76+
break;
77+
case 2:
78+
twoCnt++;
79+
break;
80+
case 3:
81+
threeSum += nList[i];
82+
threeCnt++;
83+
break;
84+
case 4:
85+
fourCnt++;
86+
if (nList[i] > fourMax) {
87+
fourMax = nList[i];
88+
}
89+
break;
5990
}
60-
i++;
91+
}
92+
93+
if (zeroCnt == 0) {
94+
printf("N ");
95+
} else {
96+
printf("%d ", evenSum);
97+
}
98+
99+
if (oneCnt == 0) {
100+
printf("N ");
101+
} else {
102+
printf("%d ", oneSum);
103+
}
104+
105+
if (twoCnt == 0) {
106+
printf("N ");
107+
} else {
108+
printf("%d ", twoCnt);
109+
}
110+
111+
if (threeCnt == 0) {
112+
printf("N ");
113+
} else {
114+
printf("%.1f ", threeSum / (threeCnt * 1.0));
115+
}
116+
117+
if (fourCnt == 0) {
118+
printf("N");
119+
} else {
120+
printf("%d", fourMax);
61121
}
62122

63123
return EXIT_SUCCESS;
64124
}
65125

66-
int isPrime(int n)
126+
int isEven(int n)
67127
{
68-
int i;
69-
for (i = 2; i <= sqrt(n); i++) {
70-
if (n % i == 0) {
71-
return 0;
72-
}
128+
if (n % 2 == 0) {
129+
return 1;
73130
}
74-
return 1;
131+
return 0;
75132
}
Lines changed: 40 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,75 @@
11
/*
2-
1014 福尔摩斯的约会 (20)(20 分)
2+
1013 数素数 (20)(20 分)
33
4-
大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母'D',代表星期四;第2对相同的字符是'E',那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、以及大写字母A到N表示);后面两字符串第1对相同的英文字母's'出现在第4个位置(从0开始计数)上,代表第4分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间
4+
令P~i~表示第i个素数。现任给两个正整数M <= N <= 10^4^,请输出P~M~到P~N~的所有素数
55
66
输入格式:
77
8-
输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串
8+
输入在一行中给出M和N,其间以空格分隔
99
1010
输出格式:
1111
12-
在一行中输出约会的时间,格式为“DAY HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解
12+
输出从P~M~到P~N~的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格
1313
1414
输入样例:
1515
16-
3485djDkxh4hhGE
17-
2984akDfkkkkggEdsb
18-
s&hgsfdk
19-
d&Hyscvnm
16+
5 27
2017
2118
输出样例:
2219
23-
THU 14:04
20+
11 13 17 19 23 29 31 37 41 43
21+
47 53 59 61 67 71 73 79 83 89
22+
97 101 103
2423
25-
注意:注意下相同的字符的范围
26-
1.A-G
27-
2.0-9或A-N
28-
3.A-Z或a-z
24+
注意审题:是第5到第27个素数
2925
*/
3026
#include <stdio.h>
3127
#include <stdlib.h>
32-
#include <string.h>
28+
#include <math.h>
3329

3430

35-
struct vp{
36-
char value;
37-
int pos;
38-
};
31+
int isPrime(int n);
3932

4033
int main ()
4134
{
42-
struct vp vv[4];
35+
int start, end;
36+
int i, cnt = 0, ccnt = 0;
4337

44-
char ss[4][61];
45-
int i, vcnt = 0;
46-
char weeks[7][4] = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
47-
48-
int week, hour, minutes;
49-
50-
for (i = 0; i < 4; i++) {
51-
if (!scanf("%s", ss[i])) {
52-
return EXIT_FAILURE;
53-
}
38+
if (!scanf("%d%d", &start, &end)) {
39+
return EXIT_FAILURE;
5440
}
5541

56-
i = 0;
57-
while (ss[0][i] != '\0' && ss[1][i] != '\0') {
58-
if ((ss[0][i] == ss[1][i])) {
59-
if (vcnt < 2) {
60-
if ((vcnt == 0) && (ss[0][i] >= 'A' && ss[0][i] <= 'G')) {
61-
vv[vcnt].value = ss[0][i];
62-
vv[vcnt].pos = i;
63-
vcnt++;
64-
} else if ((vcnt == 1) && ((ss[0][i] >= '0' && ss[0][i] <= '9') || (ss[0][i] >= 'A' && ss[0][i] <= 'N'))) {
65-
vv[vcnt].value = ss[0][i];
66-
vv[vcnt].pos = i;
67-
vcnt++;
42+
i = 2;
43+
44+
while (cnt < end) {
45+
if (isPrime(i)) {
46+
cnt++;
47+
if (cnt >= start) {
48+
if (ccnt % 10 == 0) {
49+
if (ccnt != 0) {
50+
printf("\n%d", i);
51+
} else {
52+
printf("%d", i);
53+
}
54+
} else {
55+
printf(" %d", i);
6856
}
69-
70-
} else {
71-
break;
72-
}
73-
}
74-
i++;
75-
}
76-
77-
i = 0;
78-
while (ss[2][i] != '\0' && ss[3][i] != '\0') {
79-
if (ss[2][i] == ss[3][i] && ss[2][i] >= 'A' && ss[3][i] <= 'z') {
80-
if (vcnt < 3) {
81-
vv[vcnt].value = ss[2][i];
82-
vv[vcnt].pos = i;
83-
} else {
84-
break;
57+
ccnt++;
8558
}
86-
vcnt++;
8759
}
8860
i++;
8961
}
9062

63+
return EXIT_SUCCESS;
64+
}
9165

92-
if (vv[0].value <= 'Z' && vv[0].value >= 'A') {
93-
week = vv[0].value - 'A';
94-
} else {
95-
week = vv[0].value - 'a';
96-
}
97-
98-
if (vv[1].value >= 'A' && vv[1].value <= 'N') {
99-
hour = vv[1].value - 'A' + 10;
100-
} else if (vv[1].value >= 'a' && vv[1].value <= 'z') {
101-
hour = vv[1].value - 'a' + 10;
102-
} else {
103-
hour = vv[1].value - '0';
66+
int isPrime(int n)
67+
{
68+
int i;
69+
for (i = 2; i <= sqrt(n); i++) {
70+
if (n % i == 0) {
71+
return 0;
72+
}
10473
}
105-
106-
minutes = vv[2].pos;
107-
108-
printf("%s%s%d%s%d", weeks[week], hour < 10 ? " 0" : " ", hour, minutes < 10 ? ":0" : ":", minutes);
109-
return EXIT_SUCCESS;
74+
return 1;
11075
}

0 commit comments

Comments
 (0)