いつもお世話になっています。C初心者でただいま勉強中です。
ラウンドロビンスケジューリングと呼ばれる処理方法(CPU がプロセスを順番に処理します。各プロセスは最大 q ms(これをクオンタムと呼びます)だけ処理が実行されます。q ms だけ処理を行っても、まだそのプロセスが完了しなければ、そのプロセスは列の最後尾に移動する)プログラムを作りたいんですが、自分で考えたコードで理論上問題ないと思うんですが、実行結果と一致しません。なにがいけないのか教えてください。
以下が自分の書いたコードです。```C言語
コード
#include<string.h> #include<stdio.h> #define LEN 100005 typedef struct pp{ char name[100]; int t; }P; P Q[LEN+1]; int head, tail, n; void enqueue(P x){ Q[tail]=x; if( tail + 1 == LEN) tail = 0; else tail++; } P dequeue(){ P y; y = Q[head]; if( head + 1 == LEN) head = 0; else head++; return y; } int main(){ int i, q; scanf("%d %d", &n, &q); P u; P TIME[n+1]; int c; int elaps=0,count=0; for ( i = 1; i <= n; i++){ scanf("%s", Q[i].name); scanf("%d", &Q[i].t); } for ( i = 1; i <= n; i++){ enqueue(Q[i]); } while(1){ u=dequeue(); c=u.t-q;/*あまった時間*/ if(c<=0){ count++; // printf("countは%d\n",count); elaps=u.t+elaps; // printf("aaaaaaa%d\n",elaps); TIME[count].t=elaps; printf("%d\n",TIME[count].t); if(count==n){ break; } // break; } else if(c>0){ elaps+=q; // printf("elapsは%d\n",elaps); u.t=c; enqueue(u); } } for(count=1;count<n+1;count++){ // printf("%d\n",TIME[count].t); } return 0; }
入力例
5 100
p1 150
p2 80
p3 200
p4 350
p5 20
問題の実行結果
p2 180
p5 400
p1 450
p3 550
p4 800
自分の実行結果はこうなりました。
180
560
610
630
800
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/04 03:15
2017/05/04 03:17