重拾算法Day07-小猫钓鱼
2016-11-07 本文已影响29人
面试小集
小猫钓鱼游戏
#include <stdio.h>
struct queue {
int data[1000];
int head;
int tail;
};
struct stack {
int data[10];
int top;
};
int main(int argc, const char * argv[]) {
struct queue q1, q2;
struct stack s;
int book[10];
q1.head = 1;
q1.tail = 1;
q2.head = 1;
q2.tail = 1;
s.top = 0;
for (int i=0; i<=9; i++) {
book[i] = 0;
}
for (int i=1; i<=6; i++) {
scanf("%d", &q1.data[q1.tail]);
q1.tail ++;
}
for (int i=1; i<=6; i++) {
scanf("%d", &q2.data[q2.tail]);
q2.tail ++;
}
while (q1.head<q1.tail && q2.head<q2.tail) {
int t = q1.data[q1.head];
if (book[t] == 0) {
q1.head ++;
s.top ++;
s.data[s.top] = t;
book[t] = 1;
}else {
q1.head ++;
q1.data[q1.tail] = t;
q1.tail ++;
while (s.data[s.top] != t) {
book[s.data[s.top]] = 0;
q1.data[q1.tail] = s.data[s.top];
q1.tail ++;
s.top --;
}
book[s.data[s.top]] = 0;
q1.data[q1.tail] = s.data[s.top];
q1.tail ++;
s.top --;
}
if (q1.head == q1.tail) {
break;
}
t = q2.data[q2.head];
if (book[t] == 0) {
q2.head ++;
s.top ++;
s.data[s.top] = t;
book[t] = 1;
}else {
q2.head ++;
q2.data[q2.tail] = t;
q2.tail ++;
while (s.data[s.top] != t) {
book[s.data[s.top]] = 0;
q2.data[q2.tail] = s.data[s.top];
q2.tail ++;
s.top --;
}
book[s.data[s.top]] = 0;
q2.data[q2.tail] = s.data[s.top];
q2.tail ++;
s.top --;
}
if (q2.head == q2.tail) {
break;
}
}
if (q2.head == q2.tail) {
printf("heng\n");
for (int i=q1.head; i<=q1.tail-1; i++) {
printf("%d ", q1.data[i]);
}
if (s.top>0) {
printf("桌上的牌是:");
for (int i=1; i<s.top; i++) {
printf("%d ", s.data[i]);
}
}
}
if (q1.head == q1.tail) {
printf("ha\n");
for (int i=q2.head; i<=q2.tail-1; i++) {
printf("%d ", q2.data[i]);
}
if (s.top>0) {
printf("桌上的牌是:");
for (int i=1; i<s.top; i++) {
printf("%d ", s.data[i]);
}
}
}
return 0;
}