-
Notifications
You must be signed in to change notification settings - Fork 1
/
Chapter #4
81 lines (60 loc) · 3.91 KB
/
Chapter #4
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
/*4-1입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
입력의 마지막에는 0 두 개가 들어온다.*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
int a, b;
while (1) {
scanf("%d %d", &a, &b);
if (a == 0 && b == 0) break;
printf("%d\n", a+b);
}
return 0;
}
/*int형 변수 a, b를 선언하고 사용자가 0 0을 입력하기 전까지는 무한반복을 시키기 위해 while(1)을 썻고
사용자로부터 두개의 정수를 입력받고 각각 a와 b의 주소에 저장을 한다. 만약 a와 b가 둘 다 0이라면 break하면서 반복을 빠져나오고 0 0이 아니라면 a+b를 출력한다.*/
![image](https://user-images.githubusercontent.com/80377779/115979915-ad527480-a5c3-11eb-811d-dab024360859.png)
/*4-2 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)*/
#include<stdio.h>
int main() {
int A, B, C;
scanf_s("%d", &C);
for (int i = 0; i < C; i++)
{
scanf_s("%d %d", &A, &B);
printf("%d", A+B);
}
}
//C는 테스트 케이스의 횟수입니다. 직접 몇 번 테스트할 것인지 scanf를 통해 정합니다. 이후에 C번만큼 A와 B의 값을 scanf로 직접 정하고 그 값의 합을 출력하는 반복문을 만들었습니다.
![image](https://user-images.githubusercontent.com/80377779/115979926-bc392700-a5c3-11eb-8294-c630a1ce4703.png)
/*4-3 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다.
그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙이면 새로운 수를 만들 수 있다.
다음 예를 보자.26부터 시작한다. 2+6 = 8이다. 새로운 수는 68이다. 6+8 = 14이다. 새로운 수는 84이다. 8+4 = 12이다. 새로운 수는 42이다. 4+2 = 6이다. 새로운 수는 26이다.
위의 예는 4번만에 원래 수로 돌아올 수 있다. 따라서 26의 사이클의 길이는 4이다. N이 주어졌을 때, N의 사이클의 길이를 구하는 프로그램을 작성하시오.*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void) {
int num, num2;
int count = 0;
int a, b, c;
scanf("%d", &num);
num2 = num;
while (num2 != num || count==0) {
a = num2 / 10;
b = num2 % 10;
c = (a + b) % 10;
num2 = b * 10 + c;
count++;
}
printf("%d", count);
return 0;
}
/*int형 변수 num1, num2, a, b, c, count를 선언하고 count는 0을 대입한다. 사용자로부터 입력받은 값을 num주소에 저장하고 num의 값을 num2에 대입한다.
num2에 대입하는 이유는 while문에서 num2를 계속 바꿔야하고 초기값이 필요하기 때문에 num을 초기값으로 설정하기 위함이다.
while문의 조건은 num2 !== num || count==0이고 맨 처음에는 T || F가 되서 while문으로 들어갈 수 있게 된다.
count==0은 초기에 while문에 들어가기 위해서 만든 것이고 num2 == num이 될 때 까지 싸이클을 돌게 된다. While문 로직은 문제에 주어진 대로 a(십의자리수) + b(일의자리수) = new 숫자가 나오고
새로운 숫자가 만약 두자리라면 뒷자리만 가져오기 위해 (a+b)%10을 해준다. 그 후 b * 10 + c를 num2로 만들고 count를 1씩 증가시키면서 루프를 반복한다.
루프를 빠져나오면 count값을 출력하게 되면 싸이클을 몇바퀴 돌았는지 알 수 있다.*/
![image](https://user-images.githubusercontent.com/80377779/115979943-dffc6d00-a5c3-11eb-8f17-5e2389293f0a.png)