鱼C论坛

 找回密码
 立即注册
查看: 413|回复: 1

C语言(不用链表)

[复制链接]
发表于 2023-12-15 01:42:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

用C语言对棋手信息进行排序,但是不能使用链表:
提示用户可按照两种方式进行排序:对所有棋手按等级分进行升序排序、对职业棋
手按段位进行降序排序(等级分或段位相同的棋手按照棋手编号后三位数字大小升序
排列)。根据输入信息进行排序,输出排序后的棋手信息。

例如:
A. 所有棋手按等级分进行降序排序
B. 职业棋手按段位进行降序排序
C. 退出当前功能
请选择(A-C): B
排序结果:
棋手编号 棋手姓名 棋手身份 棋手段位 等级分
P001 连笑 职业 九段 8900
P002 柯洁 职业 九段 9422
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-15 01:42:57 | 显示全部楼层
可以使用结构体数组来存储棋手信息,并使用冒泡排序算法进行排序。以下是一个可能的实现:
  1. #include <stdio.h>
  2. #include <string.h>
  3. // 定义棋手结构体
  4. struct ChessPlayer {
  5.     char id[5];        // 棋手编号
  6.     char name[20];     // 棋手姓名
  7.     char identity[10]; // 棋手身份
  8.     char rank[10];     // 棋手段位
  9.     int score;         // 等级分
  10. };
  11. // 冒泡排序函数,按score升序排序
  12. void bubbleSortByScore(struct ChessPlayer players[], int n) {
  13.     for (int i = 0; i < n - 1; i++) {
  14.         for (int j = 0; j < n - 1 - i; j++) {
  15.             if (players[j].score > players[j+1].score) {
  16.                 // 交换两个棋手的信息
  17.                 struct ChessPlayer temp = players[j];
  18.                 players[j] = players[j+1];
  19.                 players[j+1] = temp;
  20.             }
  21.         }
  22.     }
  23. }
  24. // 冒泡排序函数,按rank降序排序
  25. void bubbleSortByRank(struct ChessPlayer players[], int n) {
  26.     for (int i = 0; i < n - 1; i++) {
  27.         for (int j = 0; j < n - 1 - i; j++) {
  28.             // 先比较段位
  29.             int cmpResult = strcmp(players[j].rank, players[j+1].rank);
  30.             if (cmpResult < 0 || (cmpResult == 0 && strcmp(players[j].id + 1, players[j+1].id + 1) > 0)) {
  31.                 // 交换两个棋手的信息
  32.                 struct ChessPlayer temp = players[j];
  33.                 players[j] = players[j+1];
  34.                 players[j+1] = temp;
  35.             }
  36.         }
  37.     }
  38. }
  39. int main() {
  40.     struct ChessPlayer players[] = {
  41.         { "P001", "连笑", "职业", "九段", 8900 },
  42.         { "P002", "柯洁", "职业", "九段", 9422 },
  43.         // 添加更多棋手信息...
  44.     };
  45.     int numPlayers = sizeof(players) / sizeof(struct ChessPlayer);
  46.     while (1) {
  47.         char choice;
  48.         printf("请选择排序方式(A-按等级分升序排序 B-职业棋手按段位降序排序 C-退出): ");
  49.         scanf("%c", &choice);
  50.         getchar();  // 读取并丢弃输入缓冲区中的换行符
  51.         // 根据用户的选择进行排序并输出结果
  52.         switch (choice) {
  53.             case 'A':
  54.                 bubbleSortByScore(players, numPlayers);
  55.                 break;
  56.             case 'B':
  57.                 bubbleSortByRank(players, numPlayers);
  58.                 break;
  59.             case 'C':
  60.                 return 0;
  61.             default:
  62.                 printf("无效选择,请重新输入。\n");
  63.                 continue;
  64.         }
  65.         // 输出排序结果
  66.         printf("排序结果:\n");
  67.         printf("棋手编号 棋手姓名 棋手身份 棋手段位 等级分\n");
  68.         for (int i = 0; i < numPlayers; i++) {
  69.             printf("%s %s %s %s %d\n", players[i].id, players[i].name, players[i].identity, players[i].rank, players[i].score);
  70.         }
  71.         printf("\n");
  72.     }
  73.     return 0;
  74. }
复制代码

该程序先定义了一个棋手结构体,然后使用该结构体数组存储棋手信息。冒泡排序函数`bubbleSortByScore`按照等级分升序排序,而`bubbleSortByRank`按照段位降序排序。通过不断接收用户的选择,并根据选择进行对应的排序和输出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 18:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表