Minwoo Dev.

<윤성우의 열혈 C프로그래밍> :: 10. 도전! 프로그래밍 1 문제풀이 본문

C++

<윤성우의 열혈 C프로그래밍> :: 10. 도전! 프로그래밍 1 문제풀이

itisminu 2023. 9. 4. 11:31
728x90
반응형
SMALL

도전 1

10진수 정수를 입력 받아서 16진수로 출력하는 프로그램을 작성해 보자. 이는 서식문자의 활용에 대한 문제이므로 쉽게 해결할 수 있을 것이다.

#include<stdio.h>

int main(void)
{
    int n = 0;
    scanf("%d",&n);

    printf("%x\n",n);
    return 0;
}

 

 

 

도전 2

프로그램 사용자로부터 두 개의 정수를 입력 받아서 구구단을 출력하는 프로그램을 작성해 보자. 예를 들어서 프로그램 사용자가 3과 5를 입력하면 3단, 4단, 5단이 출력되어야 하고, 2와 4를 입력하면 2단, 3단, 4단이 출력되어야 한다.

단 한가지 조건이 있다. 사용자는 두 개의 숫자를 입력할 때에 입력 순서에 자유로워야 한다. 즉, 3과 5를 입력하건 5와 3을 입력하건 프로그램은 같은 결과를 출력해야 한다.

#include<stdio.h>

int main(void)
{
    int num1 = 0, num2 = 0;
    scanf("%d %d",&num1,&num2);
    if(num1>num2){
        int temp = num1;
        num1 = num2;
        num2 = temp;
    }

    for(int i=num1;i<=num2;i++){
        for(int j=1;j<=9;j++){
            printf("%d x %d = %d\n",i,j,i*j);
        }
        printf("\n");
    }

    return 0;
}

 

도전 3 

두 개의 정수를 입력 받아서 최대 공약수(GCD)를 구하는 프로그램을 작성해 보자.

#include<stdio.h>

int main(void)
{
    int num1 = 0, num2 = 0;
    int result = 0;
    scanf("%d %d",&num1,&num2);

    for(int i=1;i<=100;i++){
        if(num1%i==0 && num2%i==0){
            if(result<i){
                result = i;
            }
        }
    }
    printf("%d\n",result);


    return 0;
}

 

 

도전 4

필자가 좋아하는 것 중 하나가 금요일 저녁 퇴근길에 DVD나 만화책을 잔뜩 빌리고, 동네 슈퍼에 들러서 군것질거리를 사가지고 집에 들어가는 것이다. 오늘은 금요일이다. 현재 필자의 주머니에는 5천원이 있다. DVD 한편을 빌리면 3,500 원이 남는다. 슈퍼에 들러서 크림빵(500원), 새우깡(700원), 콜라(400원)을 사려한다. 잔돈을 남기지 않고 이 세가지 물건을 하나 이상 반드시 구매하려면 어떻게 구매를 진행해야 하겠는가? 물론 여기에는 여러 가지 경우의 수가 있을 것이다. 필자가 어떠한 선택을 할 수 있는지 여러분이 제시해 주기 바란다.

#include<stdio.h>

int main(void)
{
    int money = 0;
    scanf("%d",&money);

    for(int i=0;i<100;i++){
        for(int j=0;j<100;j++){
            for(int k=0;k<100;k++){
                if(i*500 + j*700 + k*400 == money){
                    printf("크림빵 : %d개, 새우깡 : %d개, 콜라 : %d개\n",i,j,k);
                }
            }
        }
    }
    return 0;
}

 

 

도전 5 

10개의 소수(Prime Number)를 출력하는 프로그램을 작성해 보자. 참고로 정수 num이 1과 num으로밖에 나눠지지 않는다면 이는 소수에 해당한다. 따라서 3은 소수이다. 그러나 4는 소수가 아니다. 1, 2, 4로 나눠지기 때문이다.

 

나는 입력된 숫자까지의 소수를 출력하는 함수로 바꾸어 풀었다.

#include<stdio.h>

int main(void)
{
    int num = 0;
    scanf("%d",&num);
    int i=0, j=0;
    for(i=2;i<=num;i++){
        for(j=2;j<i;j++){
            if(i%j==0){
                break;
            }
        }
        if(i==j)
            printf("%d ",i);
    }
    
    return 0;
}

 

 

 

도전 6

프로그램 사용자로부터 초(second)를 입력받은 후에, 이를 [시, 분, 초]의 형태로 출력하는 프로그램을 작성해 보자.

#include<stdio.h>

int main(void)
{
    int sec = 0;
    scanf("%d",&sec);
    int hour = sec/3600;
    int min = (sec%3600)/60;
    sec = sec%60;

    printf("시: %d, 분: %d, 초: %d\n",hour,min,sec);
    
    return 0;
}

 

 

도전 7 

프로그램 사용자로부터 숫자 n을 입력받는다. 그리고 나서 다음 공식이 성립하는 k의 최댓값을 계산해서 출력하는 프로그램을 작성해 보자.

#include<stdio.h>

int Mypow(int a, int n){
    int result=1;
    for(int i=0;i<n;i++){
        result *=a;
    }
    return result;
}

int main(void)
{
    int i = 0;
    int n = 0;
    int maxi = 0;
    scanf("%d",&n);

    for(i=0;i<=32;i++){
        if(Mypow(2,i)>n){
            maxi = i-1;
            break;
        }
    }

    printf("%d\n",maxi);
    
    return 0;
}

 

 

도전 8

2의 n승을 구하는 함수를 재귀함수로 구현해 보자. 그리고 그에 따른 적절한 main 함수도 구현해 보자. 참고로 재귀함수의 구현이 처음에는 어려운 편이기 때문에 여기서는 쉬운 문제를 제시하였다(본문에 소개한 예제보다도 쉬운 문제다.)

#include<stdio.h>

int mYpow(int a,int n)
{
    if(n==0){
        return 1;
    }

    return a*mYpow(a,n-1);
}


int main(void)
{
    int num = 0;
    scanf("%d",&num);

    printf("%d\n",mYpow(2,num));
    return 0;
}
728x90
반응형
LIST