C、C++、C# 或 Objective-C 中的排列
我正在尝试取一个数字并将其更改为这样的内容:
Number Change To
1 0001A
2 0002A
3 0003A
4 0001B
5 0002B
6 0003B
7 0001C
8 0002C
9 0003C
10 0001AA
11 0002AA
12 0003AA
13 0001AB
14 0002AB
15 0003AB
10 0001AC
11 0002AC
12 0003AC
13 0001BA
14 0002BA
15 0003BA
等等...
所以使用字母“A”,“B”,“C” 并使用数字 1,2,3
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于您的大多数输入,最左边的“数字”似乎变化最快,直到您达到 12->13 转换,其中中间数字变化最慢:
这绝对是尴尬的并且会与严格遵循最右边或最左边的数字变化最快的方案相比,可能需要付出很多额外的努力来编码:
或者
如果您必须完全遵循您在此处给出的方案,那么我建议进行查找 -表并将该方案硬编码到您的来源:
请不要直接使用此代码 - 我还没有进行任何输入验证或数组边界检查。
当然,我希望您选择完全不同的方法 - 这种简单的代码字替换对于特定数量的输入来说效果很好,但有一天有人可能想要输入比您表中的数字更大的数字。 (在这种情况下,当有人想要转换
19
时,它会失败。)更通用的方法,基数间转换,是一种在任意两个数基数之间进行转换的算法。在您的情况下,它可能转换为基数为6的数字
1
、2
、3
、A
、B
、C
(如果您严格遵守最左侧更改最快或最右侧更改最快方法)。For most of your inputs, the left-most 'digits' appears to be changing fastest, until you get to 12->13 transition, where the middle digit changes slowest:
This is definitely awkward and will probably require a lot of extra effort to code than a scheme where the right-most or left-most digit changes fastest is strictly followed:
or
If you must follow exactly the scheme you've given here, then I'd recommend a lookup-table and simply hardcode this scheme into your source:
Please don't use this code directly -- I haven't done any input validation or array bounds checks.
Of course, I hope you pick a different approach entirely -- this simple codeword substitution works fine for a specific number of inputs, but some day someone might want to input a number greater than you've got in your table. (In this case, when someone wants to convert
19
, it'll fail.)A more generic approach, converting between bases, is an algorithm for converting between any two number bases. In your case, it could be converting into base 6 with the digits
1
,2
,3
,A
,B
,C
(if you strictly adhere to either a left-most changes fastest or right-most changes fastest approach).