7A

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

​#include <stdio.

h>
#include <stdlib.h>

typedef struct node {


    int data;
    struct node* next;
} node;

typedef struct queue {


    node* front;
    node* rear;
} queue;

queue* create_queue() {
    queue* q = (queue*) malloc(sizeof(queue));
    q->front = q->rear = NULL;
    return q;
}

node* create_node(int data) {


    node* new_node = (node*) malloc(sizeof(node));
    new_node->data = data;
    new_node->next = NULL;
    return new_node;
}

void enqueue(queue* q, int data) {


    node* new_node = create_node(data);
    if (q->rear == NULL) {
        q->front = q->rear = new_node;
        return;
  }
    q->rear->next = new_node;
    q->rear = new_node;
}

int dequeue(queue* q) {
    if (q->front == NULL) {
        return -1;
  }
    int data = q->front->data;
    node* temp = q->front;
    q->front = q->front->next;
    if (q->front == NULL) {
        q->rear = NULL;
  }
    free(temp);
    return data;
}

int main() {
    int n, k, i;
    while(scanf("%d %d", &n, &k) == 2) {
        if(n == 0 && k == 0) {
            break;
    }
        queue* q = create_queue();
        for(i = 1; i <= n; i++) {
            enqueue(q, i);
    }
        int cnt[26] = { 0 }, m = 1, tk = 1, tn;
        while(q->front != NULL) {
            tn = dequeue(q);
            if(40-cnt[tn] >= m) {
                cnt[tn] += m;
                m = 0;
            } else {
                m -= 40-cnt[tn];
                cnt[tn] = 40;
      }
            if(m == 0) {
                tk++;
                if(tk > k) {
                    tk = 1;
        }
                m += tk;
      }
            if(cnt[tn] < 40) {
                enqueue(q, tn);
            } else {
                printf("%3d", tn);
      }
    }
        puts("");
        free(q);
  }
    return 0;
}

You might also like