ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.