데일리 codeup/단순 반복문

infinite loop, 조건에 따른 loop_220704

hayo_su 2022. 7. 4. 12:53

몇 번 loop 할지 알 수가 없을 때 while문을 이용한 무한 루프를 사용한다.
while(true) 라는 계속 반복하는 조건과 특정 조건 만족시 탈출이 가능하도록 하는 break를 활용한다.
while(1)을 이용할 수도 있다


0 나올때까지 출력

숫자를 계속 입력받다가 0이 입력되기 전까지의 결과를 그대로 출력하는 프로그램을 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int n;
    while(true){
        cin >> n;
        if(n == 0)  break;
        cout<<n<<endl;
    }
    return 0;
}

특정 숫자 맞추기

숫자 25를 맞추는 게임을 합니다. 주어지는 정수값이 25보다 작으면 Higher를, 25보다 크면 Lower를 출력하는 작업을 반복하다가, 25가 주어지면 Good을 출력하고 중단하는 프로그램을 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int n;
    while(true){
        cin >> n;
        if(n<25)    cout<<"Higher\n";
        else if(n>25)    cout<<"Lower\n";
        else{
            cout<<"Good";
            break;
        }
    }
    return 0;
}

출석 부르기 2

A반의 출석번호 1번은 John, 2번은 Tom, 3번은 Paul, 4번은 Sam입니다. 번호를 입력하면 해당하는 학생의 이름을 출력하는 작업을 반복하다가 해당하는 번호 이외의 숫자가 입력되면 Vacancy를 출력하고 종료하는 프로그램을 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int n;
    while(true){
        cin >> n;
        if(n == 1)  cout<<"John"<<endl;
        else if(n == 2) cout<<"Tom"<<endl;
        else if(n == 3) cout<<"Paul"<<endl;
        else if(n == 4) cout<<"Sam"<<endl;
        else{
            cout<<"Vacancy";
            break;
            }
        }
        return 0;
    }

몫 출력하기

어떤 수가 주어졌을 때 홀수면 아무 작업도 하지 않고, 짝수면 2로 나눈 몫을 출력하는 작업을 3번까지 반복하는 프로그램을 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int n, attemp= 3;
    while(1){
        cin >> n;
        if(n%2==0)  {
            cout<<n/2<<endl;
            attemp--;
        }
        if(attemp==0)   break;
    }
    return 0;
}

사각형의 넓이 계속 계산하기

사각형의 가로세로의 길이와 문자가 주어집니다. 문자 C가 주어지는 줄까지 사각형의 넓이를 구하는 프로그램을 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int row,col;
    char a;
    while(1){
        cin >> row >> col >> a;
        cout<<row*col<<endl;
        if(a == 'C')    break;
    }
    return 0;
}

20대의 평균 나이

몇 명의 사람들의 나이가 차례대로 주어질 때, 처음으로 20대가 아닌 다른 나이대의 사람이 나오기 전까지 입력된 나이들의 평균을 구하는 프로그램을 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int age, n = 0, sum_ages = 0;
    while(1){
        cin >> age;
        if(age<20||age>=30) break;
        sum_ages+=age;
        n++;
    }
    cout<<fixed;
    cout.precision(2);
    cout<<(double)sum_ages/n;
    return 0;
}

3n + 1 수열

자연수 n이 주어집니다. n에서 시작하여 n이 짝수면 2로 나누고, n이 홀수면 3을 곱하고 1을 더하는 것을 n이 1이 되기 전까지 계속 반복하려고 합니다. 총 몇 번을 반복해야 1이 되는지를 계산하는 프로그램을 작성해보세요.

예를 들어 n = 3인 경우 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1 순서로 1이 되므로 답이 7이 됩니다.

#include <iostream>
using namespace std;
int main(){
    int n, mul_count = 0;
    cin >> n;
    while(1){
        if(n==1)    break;
        if(n%2==0)  n /= 2;
        else    n = 3*n+1;
        mul_count++;
    }
    cout<<mul_count;
    return 0;
}

2의 거듭제곱수

2의 거듭제곱수 중 하나인 n을 입력받아, n=2^x 를 만족하는 x 값을 구하는 코드를 작성해보세요.

#include <iostream>
using namespace std;
int main(){
    int n,val = 0;
    cin >> n;
    while(1){
        if(n==1)    break;
        n/=2;
        val++;
    }
    cout<<val;
    return 0;
}

조건에 따른 연산

정수 a의 값에 따라 다음과 같은 연산을 진행할 때, n 번의 연산을 했을 때 처음으로1,000을 넘는다고 합니다. n의 값을 구해보는 프로그램을 작성해보세요.

  • a가 짝수일 때, a에 3을 곱하고 1을 더합니다.

  • a가 홀수일 때, a에 2를 곱하고 2를 더합니다.

#include <iostream>
using namespace std;
int main(){
    int a, n=0;
    cin >> a;
    while(a<1000){
        if(a%2==0)  a=a*3+1;
        else    a=a*2+2;
        n++;
    }
    cout<<n;
    return 0;
}