-
Notifications
You must be signed in to change notification settings - Fork 1
/
Chapter #5
266 lines (213 loc) · 12.3 KB
/
Chapter #5
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
/*5-1 N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다.
모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.*/
#include<stdio.h>
int main() {
int A[5];
for (int i = 0; i < 5; i++)
{
scanf_s("%d", &A[i]);
}
int min = A[0];
int max = A[0];
for (int j = 0; j < 5; j++)
{
if (A[j] > max) max = A[j];
if (A[j] < min) min = A[j];
}
printf("%d %d", min , max);
return 0;
}
/*N의값은 임의로 5로 정했습니다. 이후 배열 A에 원하는 수를 집어넣기 위해 scanf를 사용했습니다.
그 다음 정수형 min과 max에 A[0]의 값을 넣어주고, 반복문을 통해 각각의 원소값이 min보다 작으면 저장, max보다 작으면 저장하는 방식을 통해 min과 max를 결정합니다.
마지막으로 그 값을 출력합니다.*/
![image](https://user-images.githubusercontent.com/80377779/115979960-fd313b80-a5c3-11eb-941f-81110b6f744c.png)
/*5-2 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수3, 29, 38, 12, 57, 74, 40, 85, 6이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
int max,num;
int array[9];
for (int i = 0; i < 9; i++) {
scanf("%d", &array[i]);
}
max = array[0];
for (int i = 1; i < 9; i++) {
if (array[i] > max) {
max = array[i];
num = i;
}
}
printf("최대값 : %d\n순서 : %d", max, num+1);
return 0;
}
/*int형 변수 max, num 선언하고 크기가 9인 배열 array를 선언한다.
숫자 9개를 입력받기 위해 for문으로 i가 9보다 작을 때 까지 array[i]에 순서대로 입력받는다.
max = array[0]을 대입한다. 그 후 for문으로 i가 1부터 9보다 작을 때 까지 반복하면서 array[i]가 max보다 크다면 max는 array[i]로 바꿔주고 그때의 i값을 num에 저장한다.
max값과 num값이 정해지면 print를 이용해서 max와 num+1(인덱스가 0부터 시작하기 때문임)을 출력한다.*/
![image](https://user-images.githubusercontent.com/80377779/115979970-0b7f5780-a5c4-11eb-9bd7-cd7eac2cec9d.png)
/*5-3 세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.
예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.
첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.*/
#include <stdio.h>
int main() {
int arr[9];
int a, b, c;
int count = 0;
int i = 0;
while (i < 9)
{
arr[i] = 0;
i++;
}
scanf_s("%d", &a);
scanf_s("%d", &b);
scanf_s("%d", &c);
int res = a * b * c;
while (res > 0)
{
int tem = res % 10;
if (tem == 0) count++;
else if (tem > 0) arr[tem - 1] += 1;
res /= 10;
}
printf("%d\n", count);
for(int j = 0; j < 9; j++)
{
printf("%d\n", arr[j]);
}
return (0);
}
/*0의 개수를 세어줄 count를 0으로 설정합니다. 그리고 배열 arr의 크기를 9로 정하고 while문을 통해 각각의 자리에 0을 집어넣어 1~9까지의 개수를 셀 공간을 마련합니다.
scanf를 사용해 a, b, c의 값을 직접 정합니다. a * b * c의 값을 res에 넣고 res가 0초과일 때 반복하는 while문을 만듭니다. tem값에 res의 1의 자리값을 넣고,
그 값이 0이면 count에 그 값이 아니라면 arr에 해당하는 위치에 횟수를 1번 더해줍니다. 그 다음 res의 자릿수를 땡겨오기위해 res /= 10을 실행합니다.
마지막으로 0의 개수에 해당하는 count출력 후 반복문을 통해 각 자리에 해당하는 값인 arr의 원소 값을 순서대로 출력합니다.*/
![image](https://user-images.githubusercontent.com/80377779/115979984-218d1800-a5c4-11eb-8c66-92555cf4999b.png)
/*5-4 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
int user, result;
int array[10];
for (int i = 0; i < 10; i++) {
scanf("%d", &user);
array[i] = user % 42;
}
for (int i=0; i < 10; i++) {
int count = 0;
for (int j = i+1; j < 10; j++) {
if (array[i] == array[j])
count++;
}
if (count == 0)
result++;
}
printf("%d",result);
return 0;
}
/*10개의수를 입력할 int array[10]와 숫자를 입력받을 int user, 결과를 출력할 int result를 선언한다.
for문으로 i = 0부터 10까지 반복하면서 사용자에게 입력받고 user주소에 저장하고 입력할 때마다 42로 나눈 나머지를 array[i]에 저장한다.
array[0]일 때 array[1~9]까지 비교하고 array[1]일 때 array[2~9]까지 비교하는 식으로 같은 값을 찾을 것이기 때문에 이중 for문을 이용한다.
외부의 for문에서 int형 변수 count에 0을 대입한다. 내부 for문에서 j는 i+1을 주고 10까지 반복실행한다. 만약 비교하다가 같은 수가 있으면 count를 증가시킨다.
그리고 내부 for문의 반복이 끝나고 count가 0이면 result를 1증가시킨다.
즉 비교하면서 같은 수가 없을 때만 result를 증가시키기 때문에 서로 다른 수의 개수를 알 수 있다.*/
![image](https://user-images.githubusercontent.com/80377779/115979990-336ebb00-a5c4-11eb-970e-6fc3b74ed5a0.png)
/*5-5 세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다.
이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다. 예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.
세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오. 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다.
둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.*/
#include <stdio.h>
int main() {
float sub[5];
for (int i = 0; i < 5; i++)
{
scanf_s("%f", &sub[i]);
}
float max = sub[0];
for (int j = 0; j < 5; j++)
{
if (sub[j] > max) max = sub[j];
}
float total = 0;
for (int k = 0; k < 5; k++)
{
if (sub[k] != max) sub[k] = sub[k]/max*100;
total += sub[k];
}
printf("%.2f", total/5);
return (0);
}
/*과목수는 임의로 5로 정해 float sub[5]로 정했습니다. 이후에 각각의 과목의 성적을 직접 집어넣기 위해 반복문을 사용했습니다.
다음의 j반복문에서는 배열 sub에서 가장 큰 값을 찾아 max에 집어넣는 과정입니다. 그 다음 total을 0으로 초기화 한 다음 반복문을 통해서 sub의 원소값이 max와 다르면
정해진 수식을 사용해 다시 값을 설정하게 했고 그 값들을 total에 집어넣습니다. 마지막으로 변조한 평균값을 소수점 둘째자리까지 표현하기위해 printf와 %.2f를 사용했습니다.*/
![image](https://user-images.githubusercontent.com/80377779/115980010-484b4e80-a5c4-11eb-8e06-873d8c5c5399.png)
/*5-6 "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다.
예를 들어, 10번 문제의 점수는 3이 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
입력 : 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main(void) {
int size, sum, add;
char array[80];
scanf("%d", &size);
for (int i = 0; i < size; i++) {
sum = 0; add = 1;
scanf("%s", array);
for (int j = 0; j < strlen(array); j++) {
if (array[j] == 'O') {
sum += add;
add++;
}
else {
add = 1;
}
}
printf("%d\n", sum);
}
return 0;
}
/*int형 변수 size, sum, add와 char 크기가 80인 array를 만든다. 사용자에게 입력받은 값을 size주소에 저장하고 size만큼 반복하기 위해
외부 for문을 이용해서 size만큼 사용자에게 문자열을 입력받는다. 내부의 for에서 sum과 add를 이용하기 위해 sum = 0, add = 1으로 설정한다.
내부 for문에서는 j가 문자열이 들어있는만큼까지 반복계산하기 위해서 j < strlen(array)를 이용했고 만약 array[j]가 ‘O’라면 sum에 add값을 더해주고 add를 1증가시켜준다.
add를 1증가시킨 이유는 ‘O’가 이어져 있으면 1점이 증가한 상태로 더해진다. 즉 2점이 더해져야하기 때문에 add++을 했고 만약 X가 온다면 add를 다시 1로 바꿔준다.
Sum을 출력하고 i가 size보다 작다면 사용자에게 다시 입력받고 내부 for문이 실행 될 것이다. 만약 i가 size보다 같다면 반복문이 빠져나오고 프로그램은 종료된다.*/
![image](https://user-images.githubusercontent.com/80377779/115980025-6022d280-a5c4-11eb-9a58-820696f0d235.png)
/*5-7 대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다. 첫째 줄에는 테스트 케이스의 개수 C가 주어진다.
둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.*/
#include <stdio.h>
int main() {
int C = 3;
float n;
int score[1000];
for (int i = 0; i < C; i++)
{
scanf_s("%f", &n);
int sum = 0;
int count = 0;
float result;
double average;
for (int j = 0; j < n; j++)
{
scanf_s("%d", &score[j]);
sum = sum + score[j];
average = sum / n;
}
for (int k = 0; k < n; k++)
{
if (score[k] > average) count++;
}
printf("%.3f%%", count / n * 100);
}
return (0);
}
/*테스트 케이스 C는 임의로 3으로 정했습니다. 마지막 평균을 넘는 학생들 비율을 소수점 셋째 짜리까지 출력해야 하므로 학생수 n은 float로 지정합니다.
학생들의 점수가 들어갈 배열 score은 최대 가능한 학생수가 1000명이므로 그 크기를 int score[1000]으로 정합니다. 이후에 반복문에서 학생수를 직접 정하기위해 scanf를 사용하고,
점수의 총합이 들어갈 sum을 0으로, 평균 이상인 학생 수를 셀 count에도 0으로 초기화 합니다. j반복문에서 학생수만큼 성적을 집어넣어야 하므로 scanf를 사용했습니다.
그리고 그 점수들을 모두 sum에 집어넣고, 점수의 평균값인 average를 지정합니다. 그 다음 반복문에서 성적이 평균값이 넘는 학생이 있을 경우 count에 1을 더합니다.
마지막으로 평균을 넘는 학생의 비율을 반올림해 소수점 세자리까지 표현해야 하므로 %.3f%%를 썼습니다.*/
![image](https://user-images.githubusercontent.com/80377779/115980034-73ce3900-a5c4-11eb-85ae-4f0abd4aa878.png)