有k个蜗牛,各有它们不同的爬行速度,通常都是从树根向上爬,若树高为h米,如第i只蜗牛按它的速度每次向上爬ni米,向下滑mi米.试输出每只蜗牛直到爬到树顶的过程中爬过每一米线经过的次数 。统计树的每一米线都有多少次蜗牛爬过。要求:采用链表实现.采用顺序栈实现哪只蜗牛爬得最快,请输出它的爬行速度规律。
1条回答 默认 最新
- 流比 2022-12-28 13:53关注
#include <stdio.h> #include <stdlib.h> // 定义链表节点 typedef struct Node { int pos; // 当前位置 int times; // 爬过的次数 struct Node *next; // 指向下一个节点的指针 } Node; // 定义链表 typedef struct List { Node *head; // 头结点 } List; // 初始化链表 List *initList() { List *list = (List*)malloc(sizeof(List)); list->head = NULL; return list; } // 在链表的指定位置插入节点 void insertNode(List *list, int pos) { Node *node = (Node*)malloc(sizeof(Node)); node->pos = pos; node->times = 1; node->next = NULL; if (list->head == NULL) { // 如果链表为空,则将新节点作为头结点 list->head = node; } else { // 否则,遍历链表找到合适的位置插入新节点 Node *curr = list->head; while (curr->next != NULL && curr->pos < pos) { curr = curr->next; } if (curr->pos == pos) { // 如果找到了对应的位置,则将爬过的次数加 1 curr->times++; } else { // 否则,在当前节点的前面或后面插入新节点 node->next = curr->next; curr->next = node; } } } int main() { int h, k; scanf("%d%d", &h, &k); // 创建链表 List *list = initList(); // 循环处理每只蜗牛 for (int i = 0; i < k; i++) { int n, m; scanf("%d%d", &n, &m); int pos = 0; // 蜗牛的当前位置 // 循环处理蜗牛的爬行过程 while (pos < h) { pos += n; if (pos >= h) { // 如果超出了树的高度,则退出循环 break; } insertNode(list, pos); // 在链表中插入新节点 pos -= m; if (pos < 0) { // 如果位置小于 0,则将位置设为 0 pos = 0; } insertNode(list, pos); // 在链表中插入新节点 } } // 遍历链表,输出每一米线的爬过次数 Node *node = list->head; while (node != NULL) { printf("%d: %d\n", node->pos, node->times); node = node->next; } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 3无用
悬赏问题
- ¥15 AT89C51控制8位八段数码管显示时钟。
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 下图接收小电路,谁知道原理
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口