字典序列的数字

WaterWalker 2006-12-06 11:54:26
如何生成字典序列的数字,数字范围为[M,N]
例如:
1, 10, 100, 101, ..., 109, 11, 110..
现在写的是递归的,求个非递归的。
...全文
246 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
WaterWalker 2006-12-06
  • 打赏
  • 举报
回复
还一个办法是把数字转成字符后排序。但是[m,n]区间太大时就不可行。
希望能够动态生成。
WaterWalker 2006-12-06
  • 打赏
  • 举报
回复
生成的数据:

1 10 11 12 13 14 15 16 17 18
19 2 20 21 22 23 24 25 26 27
28 29 3 30 31 32 33 34 35 36
37 38 39 4 40 41 42 43 44 45
46 47 48 49 5 50 51 52 53 54
55 56 57 58 59 6 60 61 62 63
64 65 66 67 68 69 7 70 71 72
73 74 75 76 77 78 79 8 80 81
82 83 84 85 86 87 88 89 9 90
91 92 93 94 95 96 97 98 99 Press an
y key to continue
WaterWalker 2006-12-06
  • 打赏
  • 举报
回复
写了一个,贴出来。
相信有更好的方法

int i, j, k, id;

int ld;
int dd[5];

//生成[1, 10^n]的字典序列数据
ld = log10(100);
dd[ld-1] = 1;
for(i = 0; i < ld - 1; i++)
dd[i] = -1;

for(i = 1; i < 100; i++){
k = 0;
id = 0;
for(j = 0; j < ld; j++){
if(dd[j] == -1)
continue;
id += dd[j] * pow(10, k);
k++;
}

printf("%d \t", id);

k = 0;
for(j = 0; j < ld && k == 0; j++){
if(dd[j] == -1){
dd[j] = 0;
k = 1;
}
}

if(k == 1)
continue;
for(j = 0; j < ld; j++){
k = dd[j] + 1;
if(k == 10){
dd[j] = -1;
}else{
dd[j] = k;
break;
}
}

}

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧