【发布时间】:2018-04-17 15:10:00
【问题描述】:
我想生成从 1 到 n 的所有可能增加的数字子序列(允许重复),但长度为 k。
前任。 n=3, k=2
输出:
1 1
1 2
1 3
2 2
2 3
3 3
这是我的代码:
#include <stdio.h>
int s[100];
int n=6;
int k=4;
void subk(int prev,int index)
{
int i;
if (index==k)
{
for(int i=0; i<k; i++)
printf("%d ",s[i]);
printf("\n");
return;
}
s[index]=prev;
for (i=prev; i<=n; ++i)
{
subk(i,index+1);//,s,n,k);
}
}
int main()
{
int j;
for (j = 1; j<=n ; ++j)
{
subk(j,0);
}
return 0;
}
但这会产生一些不必要的重复。如何消除这些?
【问题讨论】:
-
为什么在if条件下使用return语句??
-
int s[100];全局声明,然后在main()中声明int s[4];。为什么? -
@Vijayraj S ( 1, 1 ), ( 2, 2 ) 和 ( 3, 3 ) 不是递增子序列。
-
@VladfromMoscow,但我也需要这些子序列
-
@AditiRawat 抱歉。谢谢指出
标签: c arrays loops recursion subsequence