竞赛
考级
:码代ca
wwh
按题意模拟即可。可以使用左移快速计算出 2k2^k2k 的结果。 注意 long long 的范围是 [−263,263−1][-2^{63},2^{63}-1][−263,263−1],unsigned long long 的范围是 [0,264−1][0,2^{64}-1][0,264−1],2642^{64}264 他们两个都存不下,需要特判! 时间复杂度:O(n)O(n)O(n)。
复仇者_帅童
当 n=10 时,我们需要生成 10 位格雷码中编号从 0 到 9 的 10 个数字串。格雷码的生成可以用公式:格雷码 = k ^ (k >> 1),其中 k 是编号,然后转换为 10 位二进制串(补前导 0)。 计算过程与结果: k=0 0 ^ 0 = 0 → 二进制 0000000000 k=1 1 ^ 0 = 1 → 二进制 0000000001 k=2 2 ^ 1 = 3 → 二进制 0000000011 k=3 3 ^ 1 = 2 → 二进制 0000000010 k=4 4 ^ 2 = 6 → 二进制 0000000110 k=5 5 ^ 2 = 7 → 二进制 0000000111 k=6 6 ^ 3 = 5 → 二进制 0000000101 k=7 7 ^ 3 = 4 → 二进制 0000000100 k=8 8 ^ 4 = 12 → 二进制 0000001100 k=9 9 ^ 4 = 13 → 二进制 0000001101 最终输出(10 位格雷码): plaintext 0000000000 0000000001 0000000011 0000000010 0000000110 0000000111 0000000101 0000000100 0000001100 0000001101 小技巧解释: 每个格雷码串相邻的两个数,只有一个位置的 0 和 1 不同哦~ 比如 k=1(0000000001)和 k=2(0000000011),只有从右数第 2 位不一样~ 😊 小朋友,我们来玩一个有趣的 “魔法数字串” 游戏呀~ 什么是格雷码? 格雷码是一种特别的数字串排列,就像排队一样,每个数字串都是由 0 和 1 组成的。它有个神奇的规则:相邻的两个数字串,只有一个位置的 0 和 1 不一样,而且第一个和最后一个也算相邻哦~ 题目让我们做什么? 题目说:“给你一个位数 n 和一个编号 k,找出 k 号的 n 位格雷码数字串。” 比如,n=2(两位数字串),k=3 时,答案是 “10”,就像下面这样: 怎么用简单方法找到答案? 这里有个小魔法公式,能快速算出格雷码哦~ 魔法步骤: 把 k 变成 “魔法数”:用 k 和 k 除以 2 的结果玩 “抢椅子” 游戏(学名叫 “异或”,这里可以理解为 “不同就赢”)。 比如 k=3,k 除以 2 是 1(因为 3÷2=1 余 1),那魔法数就是 3 和 1 比,哪里不一样呢? 3 的二进制是 11,1 的二进制是 01,比一下: 第一位(从右数):1 和 1 一样,第二位:1 和 0 不一样 → 所以魔法数是 10(二进制),也就是十进制的 2。 把魔法数变成 n 位的数字串: 比如 n=2,魔法数是 2(二进制 10),刚好两位,就是答案 “10” 啦~ 再举个例子试试? 输入:n=3,k=5 k=5,k 除以 2 是 2(5÷2=2 余 1),魔法数 = 5 和 2 比哪里不一样: 5 的二进制是 101,2 的二进制是 010,比一下: 第一位:1 和 0 不一样,第二位:0 和 1 不一样,第三位:1 和 0 不一样 → 魔法数是 111(二进制),也就是 7。 n=3,魔法数 7 的二进制刚好是 111,所以答案就是 “111”~ 小朋友的小练习: 如果 n=1,k=1,格雷码是多少呢? k=1,除以 2 是 0,魔法数 = 1^0=1(二进制 1),n=1,所以答案是 “1”~ 是不是很简单呀?记住这个小魔法,以后遇到格雷码问题就能轻松解决啦~ 😊
133****8336
注意开ULL!!! ∵k\because k∵k 的范围:264−12^{64}-1264−1 不需要看题目的方法,,, 只需要知道格雷码的定义即可。。。 思路:先转二进制,再转格雷码。
skirmish
文昱翀
王小树
提交答案之后,这里将显示提交结果~