初学者,碰到个棘手的问题不会做,请教一下怎么例举所有可能结果
#include<stdio.h>
main()
{
int x,num=0;
scanf("%d",&x);
for(int i=4;i>=0;i--)
{
for(int j=5;j>=0;j--)
{
for(int k=6;k>=0;k--)
{
for(int l=8;l>=0;l--)
{
for(int m=11;m>=0;m--)
{
for(int n=22;n>=0;n--)
{
if(i*6+j*5+k*4+l*3+m*2+n==x)
{
printf("%d %d %d %d %d %d\n",i,j,k,l,m,n);
num++;
}
}
}
}
}
}
}
printf("%d\n",num);
}
只计算走法个数,不需要列举所有走法,也可以不用递归:
#include<stdio.h>
int main(){
int num[22]={1,1,1,1,1,1},i,j;
for(i=0;i<22;i++){
for(j=i-6<0?0:i-6;j<i;j++){
num[i]+=num[j];
}
}
int n;
while(scanf("%d",&n),n!=0){
printf("%d\n",num[n-1]);
}
return 0;
}
这是个递归题
既然每次可以走1-6步,那么在n的位置的可能性就等于
n-1,n-2,n-3,n-4,n-5,n-6这些位置的可能性相加
而这些位置的可能性又取决于它之前的点的可能性相加
一直递归到位置是0的点结束