C言語プログラミングについて
皆さんのお力をお貸しください
問題
1~20番のナンバーの車が200週の耐久レースをする。ENTERKEYを押すたびにコースを一周するものとし、一周するごとに20台のうち一台がランダムに選ばれ、選ばれた車は1~6のランダムに選ばれた数字の数だけ順位を上げるプログラムをかいてください。
※ただしグローバル変数、ポインタは使わずif,for,while,配列のみで書くこと。
実行結果は
#(選ばれた車のナンバー) over(抜いた台数)
現在の周回数( )
順位 1 (車のナンバー)
2 (車のナンバー)
3 (車のナンバー)
・
・
・
()の中身はenterを押すたびに変化する
となるようにしてください
ポインタありのサンプルプログラムは組めたのですが、※の条件が付けられて、戸惑っています。
恥を忍んで皆さんにお願い申し上げます。
以下、サンプル(インデントの狂いやコメントに関してはご容赦ください)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define my_rand(n) (int)((n) * (rand() / (RAND_MAX + 1.0)))
void swap(int *a, int *b)
{
int c = *a;
*a = *b;
*b = c;
}
void up_rank(int a[], int m, int n)
{
while(n --){
if(!m --) break;
swap(&a[m], &a[m + 1]);
}
}
void print(int car[], int n)
{
int i;
int j = 0;
for(i = 0; i < n; ++ i)
{
j++;
printf("[%2d] %d\n",j, car[i]);
}
/*putchar('\n');*/
}
int main(void)
{
int car[] = {95,43,86,8,52,28,64,58,76,70,4,34,63,92,35,33,56,80,54,74},i;
//各車のナンバー。皆さんは1~20でかまいません
srand((unsigned)time(NULL));
printf("Start\n");
print(car, 20);
system("pause");
system("cls");
for(i = 0; i < 201; ++ i)
{
int c, m = my_rand(20), n = my_rand(6) + 1;
if(i<200)
{
printf("#%d, Overtake +%d\n",car[m] , n);
printf("raps = %d\n",i+1);
}
else
{
printf("Finishing Positions\n");
}
up_rank(car, m, n);
print(car, 20);
system("pause");
system("cls");
}
return 0;
}
お礼
if文のところで入力されるまで止まっているのですか。 入力なくても次に進むやり方はプラットホームに依存と・・・・ 端末使っている限り違う方法でする方がいいみたいですね。 回答ありがとうございます