No.6 同花顺判定
#include<iostream>
using namespace std;
class card {
public:
int num;
int pattern;
card* next = NULL;
card() {};
void set_card(char n, int p) {
num = n;
pattern = p;
}
};
void swap(int &a, int &b) {
int temp;
temp = a;
a = b;
b = temp;
}
class set {
card* head = NULL;
card* tail = NULL;
public:
set() {};
void insert(card* temp) {
if (head == NULL) {
head = tail = temp;
}
else {
tail->next = temp;
tail = temp;
}
}
void sort() {
for (card* temp = head; temp != tail; temp = temp->next) {
for (card* curr = temp->next; curr != NULL; curr = curr->next) {
if (temp->num > curr->num) {
swap(temp->num, curr->num);
}
}
}
}
bool check() {
bool n = 1;
card* curr =this-> head;
for (; curr!= tail->next; curr = curr->next) {
if (curr->pattern != this->head->pattern) {
n = 0;
}
}
return n;
}
bool judge() {
this->sort();
bool n2 = 1;
bool n1 = 1;
for (card* curr = head; curr !=tail; curr = curr->next) {
if ((curr->next->num - curr->num) != 1) {
n1 = 0;
}
}
if (head->num == 1) {
head->num = 14;
this->sort();
for (card* curr = head; curr != tail; curr = curr->next) {
if ((curr->next->num - curr->num) != 1) {
n2 = 0;
}
}
}
return (n1 || n2);
}
};
int main() {
int num;
int pattern;
set S;
for (int i = 0; i < 5; i++) {
cin >> num >> pattern;
card* temp = new card();
temp->set_card(num, pattern);
S.insert(temp);
}
if (S.check()==1) {
if (S.judge()==1) {
cout << "Yes!" << endl;
}
else {
cout << "NO!" << endl;
}
}
else {
cout << "NO!" << endl;
}
return 0;
}