感谢一位好朋友和我分享了这样的一份代码。
因为自己当时考虑的递归算法相当纠结,怎样递归都不大对,然后我的好朋友和我分享了一段这样的代码,我现在分享给大家。
题目:在N个数中取M个数,用的方法使用的是开辟一个长度为100的int型数组,
=========================================================
| 0 | 1 | 2 | 。。。。。。。。。。。。。。。。。。。。。。 | 99 | 100|
=========================================================
比如说测试数据为 4 2(也就是从1~4中取2个数有多少种方法)
步骤:
首先在数组第0个位置上放第一个数 1,然后在第1个位置进行排列,依次放入2,3,4,3个数字;
当数组第1个位置的数等于给定的数时,退回到第0个位置,将第0个位置的数换为2,然后再循环整个操作;
测试数据:
input:
4 2
output:
1 2
1 3
1 4
2 1
2 3
3 4
3 1
3 2
3 4
4 1
4 2
4 3
AC代码:#include<iostream>
#include<cstring>
using namespace std;
int cs,n,m;
int a[100];
void f(int t)
{
int i,j;
if(cs==m)
{
for(i=1;i<=m;i++)
{
cout<<a[i];
}
cout<<endl;
cs--;
}
else
{
for(i=1;i<=n;i++)
{
for(j=1;j<=cs;j++)
{
if(a[j]==i)break;
}
if(j>cs)
{
cs++;
a[cs]=i;
f(i);
}
}
cs--;
}
}
int main()
{
while(cin>>n>>m)
{
cs=0;
f(0);
}
return 0;
}