template<class
T>
int DFS_FindNext(T arr[], int nMaxElm, int nDepth)
{
int n = nDepth-1, c = nMaxElm-nDepth;
for (++arr[n]; n>=0 && arr[n]>c+n; ++arr[--n]);
if (n<0) return 0;
for (int t = n+1; t<nDepth; ++t) arr[t] = arr[t-1],++arr[t];
return 1;
};
int main()
{
int n,m;
while(scanf("%d%d",&m,&n)==2)
{
int arr[30], outmap[30];
{for(int t=0;t<m;++t)arr[t]=t,outmap[t]=t+1;}
do
{
for(int t=0; t<n; ++t)
{
printf(" %d", outmap[arr[t]]);
}
putchar('\n');
}while(DFS_FindNext(arr, m, n));
}
return 0;
}
int DFS_FindNext(T arr[], int nMaxElm, int nDepth)
{
int n = nDepth-1, c = nMaxElm-nDepth;
for (++arr[n]; n>=0 && arr[n]>c+n; ++arr[--n]);
if (n<0) return 0;
for (int t = n+1; t<nDepth; ++t) arr[t] = arr[t-1],++arr[t];
return 1;
};
int main()
{
int n,m;
while(scanf("%d%d",&m,&n)==2)
{
int arr[30], outmap[30];
{for(int t=0;t<m;++t)arr[t]=t,outmap[t]=t+1;}
do
{
for(int t=0; t<n; ++t)
{
printf(" %d", outmap[arr[t]]);
}
putchar('\n');
}while(DFS_FindNext(arr, m, n));
}
return 0;
}
本文提供了一个使用递归方法在数组中查找元素并打印序列的程序示例,包括输入验证和输出格式化。
6576

被折叠的 条评论
为什么被折叠?



