为什么 sizeof(x++) 不增加 x?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
我理解了您的问题。以下是使用C语言和优先队模板编程的解决方案: ``` #include <stdio.h> #include <stdlib.h> #define MAX_SIZE 100000 typedef struct node { long long val, step; } Node; int cmp(const void *a, const void *b) { return (*(Node*)a).val > (*(Node*)b).val ? 1 : -1; } int main() { long long x, y; scanf("%lld%lld", &x, &y); Node queue[MAX_SIZE]; int head = 0, tail = 0; Node start = { x, 0 }; queue[tail++] = start; while (head != tail) { Node node = queue[head++]; if (node.val == y || node.val * 1000 == y || node.val * 2 == y) { printf("%lld\n", node.step + abs(node.val - y)); return 0; } if (node.val < y) { Node tmp = { node.val * 1000, node.step + abs(node.val - node.val * 1000) }; queue[tail++] = tmp; tmp = (Node){ node.val * 2, node.step + abs(node.val - node.val * 2) }; queue[tail++] = tmp; } else { qsort(queue + head, tail - head, sizeof(Node), cmp); printf("%lld\n", queue[head].step + abs(queue[head].val - y)); return 0; } } return 0; } ``` 注释: 首先,我们定义了一个 `Node` 结构体来存储每个搜索过程中的状态,其中 `val` 表示当前值,`step` 表示当前步数。 然后我们定义了一个 `queue` 数组来存放每个状态节点。 接着,我们通过两种方式增加 `x` 的值,并将新状态节点加入队列中,以便之后进一步搜索。 最后,我们使用快速排序对队列中的所有未搜索节点进行排序,并输出步数最小的节点信息。 这个程序的时间复杂度为 $O(nlogn)$,空间复杂度为 $O(n)$,其中 `n` 是队列中的元素个数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿来是我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值