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 답변
-
질문하기 전에 이것저것 많이 시도해 보세요. 그런 과정을 겪어야 나중에 멋진 프로그래머가 되실 수 있어요. 고민과 맨땅의 헤딩 없이 질문하는 것은 장기적으로 볼 때 자신에게 별로 도움이 안되요. 힘내세요.
for 루프안에서 rand()함수를 실행해야 for 루프가 돌때마다 새로운 랜덤 숫자가 생성됩니다. rand() 함수의 위치를 옮기세요.
미리 배열을 하나 만들어 두고 과정 1에서 랜덤 숫자가 생성될 때 배열에 저장해 둡니다.
과정 1의 for 루프가 다시 반복되면서 새로운 랜덤 숫자가 생성될 때, 과정 2의 배열 안의 숫자들과 비교를 하고 만약 배열 안의 어느 한 값과 같다면 중복되어 생성된 랜덤 숫자 이므로 배열에 넣지 말고 다시 랜덤 숫자를 생성하고 배열 안의 숫자와 비교를 반복합니다.
과정 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"; } }
댓글 입력