알고리즘 학습 4문제

2023. 10. 30. 17:07프로그래밍/C

1.입력 파라미터 x,y를 받아 x의 y제곱을 반환하는 정수 함수 pow를 구현하라.

int pow(int x, int y)
{
    int i;
    int total = 0;
    for (i = 0; i < y; i++)
    {
        total = total * y;
    }
    return total;
}

2. 예상 출력 결과가 나오도록 배열을 반전시키는 코드를 작성하여라.

<출력 결과 = 5, 3, 2, 4, 1>

#include <stdio.h>

int main()
{
    int aaa[5] = { 1, 4, 2, 3, 5};
    int size = sizeof(aaa)/sizeof(int);
    int i, temp;

    for( i = 0; i < size/2; i++)
    {
        temp = arr[i];
        arr[i] = arr[size-1-i];
        arr[size-1-i] = temp;
    }

    for(i = 0; i < size; i++)
    {
        printf("%d", aaa[i]);
    }
    return 0;
}

3. 정수 배열과 배열의 크기를 입력받아 배열을 정렬하는 함수를 2 가지 방법으로 구현하라.

#include <stdio.h>

void arrSort1(int* arr, int size);
void arrSort2(int* arr, int size);
int main()
{
    int arr1[] = { 4,1,3,2,6,5 };
    int arr2[] = { 10,1,5,90,7,23,13,4 };
    int i = 0;
    arrSort1(arr1, sizeof(arr1) / sizeof(int));
    arrSort2(arr2, sizeof(arr2) / sizeof(int));

    for (i = 0; i < 6; i++) {
        printf("%d", arr1[i]);
    }
    for (i = 0; i < 8; i++) {
        printf("%d", arr2[i]);
    }
}
  • 답안
//버블정렬
void arrsort1(int* arr, int size) {
    int temp;
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
//선택정렬
void arrsort2(int* arr, int size) {
    int minIndex;
    int i, j;
    for (i = 0; i < size-1; i++) {
        minIndex = i;
        for (j = i+1; j < size; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
            swap(&arr[i], &arr[minIndex]);
        }
    }
}
//삽입정렬
void arrsort3(int* arr, int size) {
    int i, j, key;

    for (i = 0; i < size; i++) {
        key = arr[i];
        j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

4. stdlib.h 헤더파일의 rand() 함수를 이용하면 임의의 정수가 반환된다. 이 함수를 이용하여 로또 복권 당첨 번호를 생성하는 프로그램을 작성하라.

1) 6개 숫자 + 1개 보너스 숫자 생성
2) 숫자 범위 : 1 ~ 45
3) 같은 숫자는 한번만 나올 수 있다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int arr[7], i, j, R;
    int flag = 0;
    srand(time(NULL));

    for (i = 0; i < 7; i++)
    {
        flag = 0;
        R = ((rand() % 45) + 1);
        for (j = 0; j < i; j++)
        {
            if (arr[j] == R)
            {
                flag = 1;
            }
        }
        if (flag == 0)
        {
            arr[i] = R;
        }
        else{
            i--;
        }            
    }

    for (i = 0; i < 6; i++)
    {
        printf("%3d", arr[i]);
    }
    printf(" + %2d", arr[6]);

    return 0;
}