题目链接:https://www.nowcoder.com/pat/6/problem/4040
题目要点:
①四个字符串,两两比较,依照要求比较字符。我一开始想用字符串数组,还想用函数把每个条件写出来,用指针传参数,奈何才疏学浅,终不得。挠首顿足间,幡然醒悟,无自觉中陷入迷惘,自讨苦吃。(???我到底在说些什么……)
②确定星期:第一个字符串和第二的字符串比较,比较相同位置上的两个“大写字母”是否相同,所以这里的if条件有两个:相等且大写字母。只需要找到第一对就行,所以要用break即时跳出循环。星期吗,用switch语句,无非多复制几行printf。
③确定钟头:首先要接着上面那个继续寻找相同字符,所以i=i+1。if的判断语句有些复杂,要相等且在数字0-9之间或在a-z、A-Z之间。输出的时候有变化,当字符是0-9的时候要输出两位数,要手动填一个零,而且因为是字符串,要是直接输出%d得到的是ASCII码,要减去48进行调整。当相等的是字母时,同理,也要把字符-55变成时间。别忘了break跳出循环。
④确定分钟:与上个类似,而且要特别注意如果分钟是个位数,要手动填个零,变成两位数。
PS:好吧,我还真不知道有%02d这种表达。。。
PPS:为什么看其他人的代码有一种迷之膜拜感,看的特别辛苦。。。
下面是完整代码:
#include
#include
#include
int
main() {
char
str[
4
][
60
];
int
i;
for
(i =
0
; i <
4
; i++) {
gets(str[i]);
}
for
(i =
0
; i <
60
; i++) {
if
((str[
0
][i] == str[
1
][i]) && (str[
0
][i] <=
'Z'
&&str[
0
][i] >=
'A'
)) {
switch
(str[
0
][i]) {
case
'A'
: printf(
"MON"
);
break
;
case
'B'
:printf(
"TUE"
);
break
;
case
'C'
:printf(
"WEN"
);
break
;
case
'D'
:printf(
"THU"
);
break
;
case
'E'
:printf(
"FRI"
);
break
;
case
'F'
:printf(
"SAT"
);
break
;
case
'G'
:printf(
"SUN"
);
break
;
}
break
;
}
}
for
(i = i +
1
; i <
60
; i++) {
if
((str[
0
][i] == str[
1
][i]) && ((str[
0
][i] <=
'9'
&& str[
0
][i] >=
'0'
) || (str[
0
][i] >=
'A'
&&str[
0
][i] <=
'Z'
))) {
if
(str[
0
][i] <=
'9'
&& str[
0
][i] >=
'0'
)
printf(
" 0%d:"
, str[
0
][i]-
48
);
else
printf(
" %d:"
, (
int
)str[
0
][i]-
55
);
break
;
}
}
for
(i =
0
; i <
60
; i++) {
if
((str[
2
][i] == str[
3
][i]) && ((str[
2
][i] <=
'z'
&& str[
2
][i] >=
'a'
) || (str[
2
][i] >=
'A'
&&str[
2
][i] <=
'Z'
))) {
if
(i <
10
)
printf(
"0%d"
, i);
else
printf(
"%d"
, i);
break
;
}
}
return
0
;
}
(~ ̄▽ ̄)~
测试点 | 结果 | 用时(ms) | 内存(KB) |
---|---|---|---|
1 | 答案正确 | 2 | 384 |
2 | 答案正确 | 3 | 424 |
3 | 答案正确 | 2 | 376 |
4 | 答案正确 | 3 | 384 |
5 | 答案正确 | 3 | 384 |
6 | 答案正确 | 3 | 424 |
7 | 答案正确 | 3 | 384 |