一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种?请用递归算法编程实现。
public class Cs
{
public int times;
public int score;
public int[] loops;
public int count=0;
public static void main(String[] args)
{
Cs cs=new Cs(10,90);
cs.loop(10);
System.out.println(cs.count);
}
public Cs(int times,int score)
{
this.times=times;
this.score=score;
loops=new int[times];
}
public void loop(int cur)
{
if(cur==0)
{
if(score!=0)
return;
count++;
return;
}
cur--;
for(int i=10;i>0;i--)
{
loops[cur]=i;
score-=i;//模拟嵌套for循环
loop(cur);
score+=i; //状态恢复
}
}
}
输入两个整数n和m,从数列1、2、3、...n中任意取几个数,使其和等于m,要求将其中所有可能的组合都列出来
public class Cs
{
public int n;
public int m;
public int[] result;
public int count=0;
public static void main(String[] args)
{
Cs cs=new Cs(10,50);
cs.loop();
System.out.println(cs.count);
}
public Cs(int n,int m)
{
this.n=n;
this.m=m;
result=new int[n];
}
public void loop()
{
int[] loops=new int[n];
result=new int[n];
for(int i=0;i
loops[i]=i+1;
loop(n,loops);
}
private void loop(int cur,int[] _loop)
{
if(m<=0||_loop.length==0)
{
if(m!=0)
return;
count++;
for(int i=0;i
System.out.print(result[i]+",");
System.out.println("");
return;
}
cur--;
for(int i=0;i<_loop.length>
{
result[cur]=_loop[i];
m-=_loop[i];
//等到最终结果需要不重复,可以按元素大小排序来得到下一步_loop
int[] _loop_=new int[cur];
for(int j=i+1;j<_loop.length>
_loop_[j-i-1]=_loop[j];
loop(cur,_loop_);
m+=_loop[i]; //状态恢复
}
}
}