-
2024.02.23 - 실습C++ 2024. 2. 24. 23:19
학생 10명의 성적을 입력받아 배열에 저장하고, 합계와 평균을 구하기
#include<iostream> int main() { float jumsu[10]; float sumJumsu = 0; for (int i = 0; i < 10; i++) { std::cout << i + 1 << "번쨰 학생의 점수: "; std::cin >> jumsu[i]; sumJumsu += jumsu[i]; } std::cout << "총점 = " << sumJumsu << std::endl
- 배열 섞기. 0~9값을 배열에 넣고 그 순서를 섞어서 출력하기
#include<iostream> #include<random> int main() { int number[10]; int dest, sour, temp; //배열을 섞기 위한 변수 //난수 뽑기 위한 과정 std::random_device rd; //random_device를 이용해 시드값 뽑을 준비하기 std::mt19937 mt(rd()); //시드값을 뽑아 그 시드 값을 쓰는 메르센 트위스터 엔진 불러오기 //난수를 뽑을 분포 만들기 (분포의 종류와 범위 정하기) //길이 10의 배열을 섞을 거니 0~9까지의 난수를 뽑을 균등분포를 만들자. std::uniform_int_distribution<int> dis(0, 9); //분포에 난수 생성 엔진을 전달해서 난수 뽑는 방법: int randomNum = dis(mt); //배열 초기화 for (int i = 0; i < 10; i++) { number[i] = i; } //일단 순서대로 되어있는 배열 출력 for (int i = 0; i < 10; i++) { std::cout << "number[" << i << "]인덱스: " << number[i] << std::endl; } //배열 섞기(인덱스 2개를 무작위로 골라 값을 교환하기 for (int i = 0; i < 1000; i++) { dest = dis(mt); sour = dis(mt); temp = number[dest]; //바꾸기 전에 바꿀 자리에 있는 값 저장. number[dest] = number[sour]; number[sour] = temp; } //섞은 배열 출력해보기 std::cout << "=================섞은 후=================" << std::endl; for (int i = 0; i < 10; i++) { std::cout << "number[" << i << "]인덱스: " << number[i] << std::endl; } }
섞는 과정에서 저렇게 하면 중복된 인덱스가 골라질 수 있지만,
그 경우를 예외처리 하는 것보다 그냥 많이(여기에선 1000번) 섞는게 좋은 것 같다.
- 로또 만들기. 1~45의 숫자중 6개를 랜덤하게 고르고 오름차순으로 출력하기.
#include<iostream> #include<random> int main() { std::random_device rd; std::mt19937 mt(rd()); std::uniform_int_distribution<int> dis(0, 44); //1~45 숫자를 담은 배열에서 6개를 랜덤으로 뽑아내자. //뽑아낸 인덱스의 값은 -1으로 바꾸고, 중복된 인덱스가 걸릴 경우를 처리하자. int randomNum; int rotto[6]; int number[45]; for (int i = 0; i < 45; i++) { number[i] = i + 1; } //로또 번호 뽑기(중복 없이) for (int i = 0; i < 6; i++) { while (1) { randomNum = dis(mt); if (number[randomNum] == -1) continue; rotto[i] = number[randomNum]; number[randomNum] = -1; break; } } //로또 번호 정렬하는 알고리즘 //0번과 1번을 비교, 낮은걸 앞에, 0번과 2번을 비교, 낮은걸 앞에, ... -> 0~5번 중 가장 낮은 수가 맨 앞이 된다. //1번과 2번을 비교, 낮은걸 앞에, 1번과 3번을 비교, 낮은걸 앞에, ... -> 1~5번 중 가장 낮은 수가 맨 앞이 된다. int temp; for (int i = 0; i < 6; i++) { for (int k = i + 1; k < 6; k++) { if (rotto[i] > rotto[k]) { temp = rotto[i]; rotto[i] = rotto[k]; rotto[k] = temp; } } } for (int i = 0; i < 6; i++) { std::cout << rotto[i] << " "; } }
'C++' 카테고리의 다른 글
2024.02.26 - 열거형 자료형(enum) (0) 2024.02.27 2024.02.26 - 함수 (0) 2024.02.26 2024.02.23 - 배열 (0) 2024.02.24 2024.02.22 - 난수 생성 (0) 2024.02.22 2024.02.22 - for (0) 2024.02.22