fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define TOTAL_CLASSES 10 // 班の数
  6. #define MAX_POINTS 5 // 1つの班に与えられる最大得点
  7. #define MAX_TOTAL_POINTS 10 // 合計得点の上限
  8.  
  9. int main() {
  10. int my_class; // 自分の班の番号
  11. int scores[TOTAL_CLASSES]; // 各班への得点
  12. int total_points = 0; // 合計得点
  13. int i; // ループ用変数
  14.  
  15. // 自分の班番号を入力
  16. printf("自分の班の番号を入力してください (0〜%d): ", TOTAL_CLASSES - 1);
  17. scanf("%d", &my_class);
  18.  
  19. if (my_class < 0 || my_class >= TOTAL_CLASSES) {
  20. printf("エラー: 無効な班番号です。\n");
  21. return 1; // 異常終了
  22. }
  23.  
  24. // 乱数の種を初期化
  25. srand(time(NULL));
  26.  
  27. // 初期化
  28. for (i = 0; i < TOTAL_CLASSES; i++) {
  29. scores[i] = 0;
  30. }
  31.  
  32. // ランダムな得点を生成
  33. for (i = 0; i < TOTAL_CLASSES; i++) {
  34. if (i == my_class) {
  35. scores[i] = 0; // 自分の班は必ず0点
  36. continue;
  37. }
  38.  
  39. if (total_points < MAX_TOTAL_POINTS) {
  40. // 班に割り振ることができる得点の最大値を計算
  41. int remaining_points = MAX_TOTAL_POINTS - total_points;
  42. int max_points_for_class = remaining_points < MAX_POINTS ? remaining_points : MAX_POINTS;
  43.  
  44. // 班の得点を乱数で決定
  45. scores[i] = rand() % (max_points_for_class + 1);
  46. total_points += scores[i];
  47. } else {
  48. scores[i] = 0; // 残りの得点がない場合は0点
  49. }
  50. }
  51.  
  52. // 結果を表示
  53. printf("\nランダムな得点結果:\n");
  54. for (i = 0; i < TOTAL_CLASSES; i++) {
  55. printf("班 %d: %d 点\n", i, scores[i]);
  56. }
  57.  
  58. printf("合計得点: %d 点\n", total_points);
  59.  
  60. return 0; // 正常終了
  61. }
  62.  
Success #stdin #stdout 0s 5280KB
stdin
3
stdout
自分の班の番号を入力してください (0〜9): 
ランダムな得点結果:
班 0: 5 点
班 1: 4 点
班 2: 1 点
班 3: 0 点
班 4: 0 点
班 5: 0 点
班 6: 0 点
班 7: 0 点
班 8: 0 点
班 9: 0 点
合計得点: 10 点