#include <stdio.h>
#include <math.h>
void swap(int* a, int*b); // 스왑(값 서로 바꾸기)
void bubbleSort(int* arr, int length); // 버블 정렬(오름차순)
int binarySearch(int* arr, int target, int first, int end); // 이진 탐색
void printStar(int height); // 별 출력
int fibonacci(int n); // 피보나치 수 출력
int is_prime(int n); // 소수 판별
void gugudan(); // 구구단
int findMax(int* arr, int n); // 최댓값 찾기
int findMin(int* arr, int n); // 최솟값 찾기
void printFactors(int n); // 약수 찾기
int main() {
// 스왑(값 서로 바꾸기)
//int a = 5;
//int b = 3;
//printf("바꾸기전 : a = %d, b = %d\n", a, b);
//swap(&a, &b);
//printf("바꾸기후 : a = %d, b = %d\n", a, b);
// 버블 소트
//int arr[9] = {9, 3, 7 ,5 ,8 ,6 ,1, 2, 4};
//bubbleSort(arr, 9);
//for (int i = 0; i < 9; i++) {
// printf("%d ", arr[i]);
//}
// 이진 탐색
//int arr[9] = { 9, 3, 7 ,5 ,8 ,6 ,1, 2, 4 };
//bubbleSort(arr, 9);
//int n;
//printf("어느 수를 찾으실 건가요? : ");
//scanf_s("%d", &n);
//int result = binarySearch(arr, n, 0, 9);
//if (result != -1) {
// printf("%d은 %d번쨰 인데스에 있습니다.\n", n, result+1);
//}
//else {
// printf("찾으시는 %d은 없습니다.\n", n);
//}
// 별 출력
//int n;
//printf("어느 높이 만큼의 별을 출력하실건가요? : ");
//scanf_s("%d", &n);
//printStar(n);
// 피보나치 수 출력
//int n;
//printf("몇 번째 피보나치 수 출력하실건가요? : ");
//scanf_s("%d", &n);
//printf("%d", fibonacci(n));
// 소수 판별
//int n;
//printf("어느 수를 소수인지 판별 하실건가요? : ");
//scanf_s("%d", &n);
//if (is_prime(n)) {
// printf("%d는 소수 입니다.", n);
//}
//else {
// printf("%d는 소수가 아닙니다.", n);
//}
// 구구단 출력
//gugudan();
// 최대 최소 찾기 찾기
//int arr[9] = { 9, 3, 7 ,5 ,8 ,6 ,1, 2, 4 };
//printf("최댓값은 : %d \n최솟값은 : %d\n", findMax(arr, 9), findMin(arr, 9));
// 약수 구하기
printFactors(14);
return 0;
}
void swap(int* a, int* b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void bubbleSort(int* arr, int length) {
for (int i = 0; i < length; i++) {
for (int j = 0; j < length - i - 1; j++) {
if (arr[j] > arr[j+1]) {
swap(arr + j, arr + j + 1);
}
}
}
}
int binarySearch(int* arr, int target, int first, int end) {
// 탈출 조건
if (first > end) {
return -1;
}
int mid = (first + end) / 2;
if (arr[mid] == target) {
return mid;
}
else if (arr[mid] < target) {
return binarySearch(arr, target, mid + 1, end);
}
else {
return binarySearch(arr, target, first, mid - 1);
}
}
void printStar(int height) {
for (int i = 0; i < height; i++) {
for (int j = 0; j < (height - i - 1); j++) {
printf(" ");
}
for (int j = 0; j < 2*i+1; j++) {
printf("*");
}
printf("\n");
}
}
int fibonacci(int n) {
if (n == 1 || n == 2) {
return 1;
}
return fibonacci(n - 2) + fibonacci(n - 1);
}
int is_prime(int n) {
if (n == 1) {
return 0;
}
for (int i = 2; i <= sqrt(n);i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
void gugudan() {
for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
printf("%d * %d = %d\n", i, j, i * j);
}
printf("\n");
}
}
int findMax(int* arr, int n) {
int max = arr[0];
for (int i = 1; i < n; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
return max;
}
int findMin(int* arr, int n) {
int min = arr[0];
for (int i = 1; i < n; i++) {
if (min > arr[i]) {
min = arr[i];
}
}
return min;
}
void printFactors(int n) {
printf("%d의 약수: ", n);
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
printf("%d ", i);
}
}
printf("\n");
}