728x90
반응형
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
86
87
88
89
90
|
#include<stdio.h>
#include<limits.h>
//반례
/*
1) 12 1 30 2 15 3
2) 0
3) 15 20
*/
//전역변수 선언해줘야함
static int cnt = 0;
bool terminate = false;
void print(int* arr) {
int ans = 1;
for (int i = 0; i < 3; i++) {
ans *= arr[i];
}
printf("%d\n", ans);
}
void input(int* arr) {
for (int i = 0; i < 3; i++) {
if (terminate) {
break;
}
while (true) {
if (cnt >=2) {
//cnt가 2보다 크거나 같으면 바로 break때려야
terminate = true;
break;
}
//while을 써야 12 1 30 2 15 3 이런 반례들 해결가능
scanf_s("%d", &arr[i]);
if (arr[i] == 0) {
terminate = true;
break;
}
if (1 <= arr[i] && arr[i] <= 10) {
cnt = 0;//앞에서는 범위 실패인데, 현재 turn은
//잘 나왔으면 다시 cnt초기화
break;
}
else {
printf("다시!!\n");
cnt+=1;
}
}
}
if (!terminate) {
print(arr);
}
}
int main() {
int arr[3];
input(arr);
}
|
cs |
문제 풀면서 주의해야하는것
1) scanf_s를 while문 안에 넣었는데 그 이유는 잘못 입력했을 때 다시 입력받기 위함 -->continue가 안먹힘
2) 두번 연속 범위 실패를 확인하기 위해 cnt변수를 만들어줬는데 누적 될 수있게 cnt를 전역 static변수로 선언
3) cnt는 범위에 해당하는 값이 나왔을때는 다시 0으로 초기화 --> 왜냐면 두번이 연속으로 실패여야지만 프로그램이 종료되기 때문.
4) cnt가 2 이상일때 terminate=true랑 break때려주는건 scanf_s보다 앞에 써줘야함. 그래야 cnt가 2이상일때 입력을 더이상 안받을 수 있음
<반례>
12 20
0
12 1 30 2 15 3
3 32 33
728x90
반응형
'C > 기말고사 대비(2022 1학기)' 카테고리의 다른 글
[C언어 시험대비] 배열포인터 (0) | 2022.06.11 |
---|---|
[C언어 시험대비] 16년 기출(2) (0) | 2022.06.11 |
[기말고사 기출문제 풀이] 2016년 기말(가) (0) | 2022.06.08 |
[C언어 시험대비] 정규표현식 (0) | 2022.06.06 |
[c언어 시험대비] static과 재귀 (0) | 2022.06.06 |
댓글