重拾算法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;
}
上一篇下一篇

猜你喜欢

热点阅读