题目链接:
https://www.nowcoder.com/pat/6/problem/4078
要点:
①大概扫一眼题目,A1 A2 A3 A4 A5, 熟悉的switch-case 模式嘛,那重点就是每一个case 要怎么写了。
②再看输入描述,很眼熟噻。
“先输入一个N,再输入N个数”,用下面这个来搞定:
int n;
scanf("%d", &n);
int i;
for (i = 0; i < n; i++) {
scanf("%d", &item);
... }
所以,就此就能敲定,在for循环里放入switch语句,对每一次输入的item都进行一次判断。并由于输出结果是限定的 A1~A5,所以我就偷懒,直接定义了五个数(A1~A5)来存放每一次判断的结果。
③那么就开始写switch语句。
有几点需要注意:
case 0~4 A1~A5 一一对应,不要搞错;
关于{ },因为case 里面还会有if语句,所以我建议,写的时候把{ }都加上,写完一个case ,再检查删去不必要的{ },方便书写,也方便最后的修改;
switch(item%5){...}
case 0: //item%5=0 再加一句if判断偶数就好
case 1://item%5=1 额外定义int flag=1;再每次flag=-flag;实现符号交替
case 2://item%5=2 直接++就好
case 3://item%5=3 我们先算sum,等输出的时候再算平均数
case 4://item=4 一个if语句判断大小,大的留下
这样switch语句就完成了,把每一个单独来写还是挺简单哒,对不?
④输出语句这里我自己是有点懵,突然就有一种想用数组的冲动,不过,A4要保留小数输出,跟其他的不一样,想想就很麻烦。
于是偷懒如我,决定把A1~A5,每一个单独判断是否为0,单独输出。
除了敲得字多了些,也没有什么不好嘛。
另外再提醒一下,我们A4求的是sum,且定义的是int型,输出是需要强制转换 (double)。
下面是完整代码:
#include<stdio.h>
#include<math.h>
#include<string.h>
int
main() {
int
n;
scanf(
"%d"
, &n);
int
A1, A2, A3, A4, A5;
A1 = A2 = A3 = A4 = A5 =
0
;
int
count=
0
;
int
flag =
1
;
int
item;
int
i;
for
(i =
0
; i < n; i++) {
scanf(
"%d"
, &item);
switch
(item %
5
) {
case
0
: {
if
(item %
2
==
0
)
A1 = A1 + item;
break
;
}
case
1
: {
A2 = A2 + flag*item;
flag = - flag;
break
;
}
case
2
: {
A3++;
break
;
}
case
3
: {
A4 = A4 + item;
count++;
break
;
}
case
4
: {
if
(A5 < item)
A5 = item;
break
;
}
}
}
if
(A1 !=
0
)
printf(
"%d "
, A1);
else
printf(
"N "
);
if
(A2 !=
0
)
printf(
"%d "
, A2);
else
printf(
"N "
);
if
(A3 !=
0
)
printf(
"%d "
, A3);
else
printf(
"N "
);
if
(A4 !=
0
)
printf(
"%.1f "
, (
double
)A4 / count);
else
printf(
"N "
);
if
(A5 !=
0
)
printf(
"%d"
, A5);
else
printf(
"N"
);
return
0
;
}
//真的是好长~~~
(~ ̄▽ ̄)~
测试点
测试点 | 结果 | 用时(ms) | 内存(KB) |
---|---|---|---|
1 | 答案正确 | 3 | 300 |
2 | 答案正确 | 4 | 272 |
3 | 答案正确 | 4 | 268 |
4 | 答案正确 | 3 | 304 |
5 | 答案正确 | 4 | 296 |
6 | 答案正确 | 3 | 296 |
7 | 答案正确 | 3 | 416 |