c - 什么算法将数字 27 映射到 BBC

标签 c algorithm combinatorics

为了澄清混淆 - 我想编写一个将数字映射到以下字母组合列表的函数。

下表最能说明我的问题。

A   1
B   2
C   3
AA  4
AB  5
AC  6
BA  7
BB  8
BC  9
CA  10
CB  11
CC  12
AAA 13
AAB 14
AAC 15
ABA 16
ABB 17
ABC 18
ACA 19
ACB 20
ACC 21
BAA 22
BAB 23
BAC 24
BBA 25
BBB 26
BBC 27

我想设计一个能够将给定数字映射到此表左列的函数。我试过先给字母分配数字。

A = 0
B = 1
C = 2

这使我可以形成下表(Cn - 列号,从右到左)。

C3  C2  C1  Number

        0   1
        1   2
        2   3
    0   0   4
    0   1   5
    0   2   6
    1   0   7
    1   1   8
    1   2   9
    2   0   10
    2   1   11
    2   2   12
0   0   0   13
0   0   1   14
0   0   2   15
0   1   0   16
0   1   1   17
0   1   2   18
0   2   0   19
0   2   1   20
0   2   2   21
1   0   0   22
1   0   1   23
1   0   2   24
1   1   0   25
1   1   1   26
1   1   2   27

所以这看起来像是一种递归循环类型的算法,但我不知道如何将其写成代码。有什么建议吗?

最佳答案

无论是谁(用户:n.m.)写了消失的评论,这只是以 3 为基数的计数,除了所有数字都偏移 +1。数字真的代表A=0, B=1, C=2

因此 BBC = ('B'+1)*3^2 + ('B'+1)*3 + ('C'+1) = 2*9 + 2*3 + 3 = 27

fromInt() 的伪代码,Antoine 已经给了你。同样的想法:

char* fromInt(int n) {
  result = ""
  working_val = (n-1)
  while (working_val>0) {
    Prepend to result the digit "CAB"[ working_val % 3 ]
    working_val /= 3
  }
  return result
}

严格来说,我们不关心捕获 Antoine 指出的特殊情况 0,因为您的列表没有 0 的表示。

关于c - 什么算法将数字 27 映射到 BBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23029695/

相关文章:

c - 32 位应用程序如何在 64 位 Linux 上进行系统调用?

c - 混淆的科学计算器。请解释一下它是如何工作的

c - rand() 不返回随机值

algorithm - 如何对楼层数序列求和?

java - 搜索数组

python - 在列表中查找组合的更优雅的方法是什么?

c++ - 使用递归将所有可能的组合(重复)作为数组中的值

C - 位矩阵的位字段

algorithm - 最长单调递减子序列,不包含连续元素

algorithm - 找到与数据一致的分数的所有可能组合