c++ 난수생성

조회수 907회
#include <cstdlib>
#include <ctime>
#include <iostream>

using namespace std;
int main() {

 srand(time(0));

 int num = rand()%101;
 for(int i = 0; i <=9; i++){
   cout << num << endl;
 }
}

출력을하면 랜덤숫자 9개가 모두똑같은데 for문으로 각각다른 랜덤숫자 10개를 출력하려면 어떻게 해야하나요?

3 답변

  • 질문하기 전에 이것저것 많이 시도해 보세요. 그런 과정을 겪어야 나중에 멋진 프로그래머가 되실 수 있어요. 고민과 맨땅의 헤딩 없이 질문하는 것은 장기적으로 볼 때 자신에게 별로 도움이 안되요. 힘내세요.

    1. for 루프안에서 rand()함수를 실행해야 for 루프가 돌때마다 새로운 랜덤 숫자가 생성됩니다. rand() 함수의 위치를 옮기세요.

    2. 미리 배열을 하나 만들어 두고 과정 1에서 랜덤 숫자가 생성될 때 배열에 저장해 둡니다.

    3. 과정 1의 for 루프가 다시 반복되면서 새로운 랜덤 숫자가 생성될 때, 과정 2의 배열 안의 숫자들과 비교를 하고 만약 배열 안의 어느 한 값과 같다면 중복되어 생성된 랜덤 숫자 이므로 배열에 넣지 말고 다시 랜덤 숫자를 생성하고 배열 안의 숫자와 비교를 반복합니다.

    4. 과정 3을 계속 반복합니다.

    • 코드
    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    
    using namespace std;
    
    bool check_dup(int array[], int cnt, int num);
    
    int main() {
        constexpr int loop_num = 10;
        constexpr int max_num = 100;
    
        int num = 0;
        int nums[loop_num] = { 0, };
        int num_cnt = 0;
    
        srand((unsigned int)time(NULL));
    
        for (int i = 0; i < loop_num; ++i)
        {
            num = rand() % (max_num + 1);
    
            if (check_dup(nums, num_cnt, num))
            {
                --i;
                continue;
            }
            else
            {
                nums[num_cnt] = num;
                ++num_cnt;
            }
        }
    
        for (int i = 0; i < loop_num; ++i)
            cout << nums[i] << ' ';
    
        cout << '\n';
    
        return 0;
    }
    
    bool check_dup(int array[], int cnt, int num)
    {
        bool result = false;
    
        for (int i = 0; i < cnt; ++i)
        {
            if (array[i] == num)
            {
                result = true;
                break;
            }
        }
    
        return result;
    }
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • 얼마나 고민을 하고 질문을 하는 건가요? for 루프가 무엇인지, rand 함수가 어떤 동작을 하는지만 안다면 충분히 스스로 할 수 있을 문제입니다.

    이걸 가지고 아주 열심히 고민했는데도 모르겠어서 질문을 했다면, 프로그래밍은 적성이 아닙니다. 다른 걸 하세요. 프로그래밍 못해도 잘 먹고 살 수 있습니다.

  • #include <cstdlib>
    #include <ctime>
    #include <iostream>
    
    using namespace std;
    int main() {
    
     srand(time(0));
    
    //  int num = rand()%101; 문제의 부분.
    
     for(int i = 0; i <=9; i++){
    //   cout << num << endl; 문제의 부분
        cout << rand()%101 << "\n";
     }
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)