#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
// switch 문을 제거하였다.
void card(int hand) {
string message[]={"",
"HIGH CARD","PAIR","THREE OF A KIND","STRAIGHT",
"FLUSH","FULL HOUSE","FOUR OF A KIND","STRAIGHT FLUSH"};
cout<<message[hand]<<endl;
}
// if문없이 winner를 출력한다.
void winner(int h1, int h2) {
string message[]={"Winner is Hand2!","Winner is Hand1!"};
// h1에서 h2를 빼주면
// h1이 h2보다 클 경우에는 1보터 7사이의 값을 가진다.
// 이 값이 6을 더해주면 7부터 13사이의 값을 가진다.
// 이 값을 7로 나누면 몫은 1이 된다.
// h1이 h2보다 크지 않을 경우에
// h1에서h2를 뺀 값은 0에서 -7의 값을 가진다.
// 이 값에 6을 더해주면 -1에서 6사이의 값을 가지게 된다.
// 이 값을 7로 나누면 몫은 0이 된다.
// 엄밀히 이야기 하면 수학적으로 -1을 7로 나누면 몫이 -1이 되어야 한다.
// 하지만 c/c++ 언어에서는 몫이 0이 된다.
cout<<message[(6+h1-h2)/7]<<endl;
}
int main() {
int hand1 = 0;
int hand2 = 0;
srand(time(NULL));
// while문을 사용하지 않고, hand1과 hand2의 값이 다르도록 만들었다.
// 강제로 hand1과 hand2의 값이 서로 다르도록 한다.
// hand1의 값에 0부터 6까지의 값을 더하고 나서
// 8로 나눈 나머지에 1을 더해 주면 hand2의 값은
// hand1의 값과 달라진다.
// hand1의 값이 1, 부터 8일때 까지를 모두 따져보면
// hand1과 hand2의 값이 같지 않다는 것을 알 수 있다.
hand1 = rand() % 8 + 1;
hand2 = (hand1 + (rand() % 7)) % 8 + 1;
cout<<"Hand1: ";
card(hand1);
cout<<"Hand2: ";
card(hand2);
cout<<endl;
winner(hand1, hand2);
return 0;
}
위의 프로그램에서는 모든 if문 while문 switch문을 제거하였습니다.
'c·c++ > c++ 프로그래밍' 카테고리의 다른 글
최대공약수 구하기 (0) | 2013.10.05 |
---|---|
2진수를 10진수로 바꾸기 (0) | 2013.10.05 |
확장된 애너그램 사전만들기 (0) | 2013.07.24 |
c++ 입력오류 해결 (0) | 2013.05.31 |
복소수 클래스 (0) | 2013.05.04 |