有人能帮帮我吗?我正在尝试找到公式并用PHP语言编写一段代码,这使得下一个
想象一下,我们有3种类型的东西,k = 1,2,3,这个数字的长度可以是各种(n长度),但相邻类型不应该(!)相同 - 1,1或2 ,2
例如 k = 1,2,3 n = 5
输出 1,2,3,1,2 | 1,2,3,1,3 | 1,2,3,2,1 | 1,2,3,2,3 |
1,3,2,1,3 | 1,3,2,1,2 | 1,3,2,1,3 | 1,3,2,3,1 | 1,3,2,3,2 .........
这是一个常见的命名问题,请与我分享,我会尽量找到一些资源
由于
答案 0 :(得分:0)
你在循环中做一个循环。由于k具有长度,并且k变量中的数字是您移动的数字,因此它们呈现外部循环。 (for loop) 现在你可以沿输出运行,因为你也知道数字n。 你将k [1]作为n [1]的第一个变量,并且在内循环结束之前它不会改变。 (在这种情况下,k [1]是1)。现在你做一个while循环,带有一个可更改的(例如)变量,该变量在创建的n数组上运行。 n将是(1,null,null,null,null)。而a!= n.lenth()。你检查n(a-1)的值是否确定不一样。每当达到n.length时,你改变k数组上下一个数字的最后一个数字的值,然后你回到2个点(n [a-1])并改变它然后返回,一直去追求从一开始直到所有斑点都被改变并且阵列的n [2]具有k阵列的最高值。为了让生活变得更轻松,你可以创建一个新的数组,让我们为这个问题分配j,一旦最近的n [a]点获得最后一个值,它就会得到一个值。
顺便说一下,每当你返回时,将你运行的斑点的值重置为空,这样k数组中的所有数字都是可选的。当j数组已满时,重置所有数组并在for循环中继续。
希望我有所帮助,如果您有任何问题可以随时提出
答案 1 :(得分:0)
生成此类列表的最简单方法是递归的(如果n,k不大 - 注意变量计数为k *(k-1) n-1 )。
伪代码:
Generate(list, n, k, lastvalue)
if (list.length = n)
output(list)
else
for i = 1 .. k
if (i != lastvalue)
Generate(list + i, n, k, i)
Delphi代码
procedure Generate(list: string; n, k, lastvalue: Integer);
var
i: Integer;
begin
if (Length(list) = n) then
Memo1.Lines.Add(list)
else
for i := 1 to k do
if (i <> lastvalue) then
Generate(list + IntToStr(i), n, k, i)
end;
begin
Generate('', 4, 3, 0);
n = 4,k = 3
的输出1212 1213 1231 1232 1312 1313 1321 1323
2121 2123 2131 2132 2312 2313 2321 2323
3121 3123 3131 3132 3212 3213 3231 3232