【发布时间】:2009-12-22 06:30:28
【问题描述】:
我需要一个计数器algortihm,它使用任意给定的数字进行计数。
我的代码是这样的:
static char digits[] = {'x','y','z'}; /* Arbitrary number of arbitrary digits. */
int i;
for(i=0; i<100; i++) {
printf("%s\n", get_next());
}
我的预期输出:
x
y
z
yx
yy
yz
zx
zy
zz
yxx
yxy
yxz
yyx
yyy
yyz
yzx
yzy
yzz
zxx
... and so on
如你所见,我需要实现get_next()函数的算法,所以使用C语言不是重点。
为澄清目的编辑 I:
我的 get_next() 函数可能类似这样:
char get_next() {
static previous = digits[0];
char *next_number;
/* do something here using previous and digits[] */
return next_number;
}
请注意,使用 get_next(void) 或 next(previous_number) 或 next(digits, previous_number) 原型作为生成下一个数字的函数对我来说并不重要。
为澄清目的而编辑 II:
与上面的简单示例相比,我的实际情况更加复杂,我需要一个通用的解决方案,该解决方案适用于任意数字的任意数字。
数字输入示例:
static char digits[] = {'a', 'b', 'c', ... 'z', '0', '1', ...}; /* Lots of digits */
static char digits[] = {'s','t','a','c','k','o','v','e','r'}; /* Arbitrary sequence */
【问题讨论】:
-
您确定要get_next(),而不是get(i),将i 转换为您自己的编号函数吗?
-
你不想拥有 x,y,z,xx,xy,xz,yx,yy,yz,zx,zy,zz,xxx,xxy,...?
-
paxdiablo:我不认为他有,
x是这个计数系统中的0等价物。就像您在十进制的9和10之间没有00。 -
@paxdiablo:我认为给出的例子是正确的。例如,假设 x、y、z 分别为 0、1、2。
-
同意。 get_next() 怎么知道
digits,或者最后返回的组合是什么(假设你不想要静态)
标签: c algorithm counter state-machine