Demo entry 6760333

생일 문제

   

Submitted by 정시윤 on Sep 13, 2018 at 04:38
Language: C++. Code size: 1.8 kB.

#include <iostream> // 표준 입출력
#include <Windows.h> // 콘솔창 제어
#include "pch.h" // 미리 컴파일된 헤더

using namespace std;

int main(int argc, char const *argv[]) {

	float n, n50, n100, clr1, clr2; // 인원수, 50%의 인원수, 100%의 인원수, 색깔 표시 (50%), 색깔 표시 (100%)
	long double Pn, Pn0, Pn50, Pn100; // 최종 확률 / 50% 넘길때의 값 / 100% 넘길때의 값
	Pn0 = 1, Pn50 = 0, Pn100 = 0, n50 = 0, n100 = 0, clr1 = 0, clr2 = 0; // 값 초기화 (0 * x = 0) 

	std::cout.precision(10);

	std::cout << "1 명일때, 생일이 같은 사람이 두명 이상 있을 확률 : 0%" << endl;

	for (n = 1; n <= 364; n++) { // 메인 블럭 (확률 계산)
		
		Pn0 *= (1 - (n / 365));
		Pn = 1 - Pn0;

		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); //기본 색깔 설정

		if (Pn >= 0.5 && clr1 == 0) {

			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12); // 빨간 글씨
			std::cout << n + 1 << " 명일때, 생일이 같은 사람이 두명 이상 있을 확률 : " << 100 * Pn << "% (50% 달성)" << endl;

			clr1++;

			n50 = n + 1;
			Pn50 = Pn;
		}

		else if (Pn >= 1 && clr2 == 0) {

			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11); // 민트 글씨
			std::cout << n + 1 << " 명일때, 생일이 같은 사람이 두명 이상 있을 확률 : " << 100 * Pn << "% (100% 달성)" << endl;

			clr2++;

			n100 = n + 1;
			Pn100 = Pn;
		}

		else {

			std::cout << n + 1 << " 명일때, 생일이 같은 사람이 두명 이상 있을 확률 : " << 100 * Pn << "%" << endl;
		}
	}

	std::cout << "365 명일때, 생일이 같은 사람이 두명 이상 있을 확률 : 100%" << endl;

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12); // 빨간 글씨
	std::cout << endl << endl << n50 << " 명일때, 생일이 같은 사람이 두명 이상 있을 확률 : " << 100 * Pn50 << "%" << endl;

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 11); // 민트 글씨
	std::cout << endl << endl << n100 << " 명일때, 생일이 같은 사람이 두명 이상 있을 확률 : " << 100 * Pn100 << "%" << endl;

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7); //기본 색깔 설정

	return 0;
}

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).