C语言一菜鸟级


私信TA

用户名:LHL

访问量:66231

签 名:

AC总是意料之外 ^_^

等  级
排  名 53
经  验 11536
参赛次数 5
文章发表 56
年  龄 24
在职情况 在职
学  校 四川工商学院
专  业 通信工程

  自我简介:

C语言 蓝桥杯 ACM 新人 欢迎大佬 前来指导 交流 本人 博客https://fivecc.blog.csdn.net/

解题思路:

 都遍历一遍 ;对于数组里的值 只有两种情况 要么取 要么不取 通过回溯 法遍历每一种情况 

  根据要求 预先不考虑 数组后面 的数字 因此需倒着遍历并且先遍历不取再遍历取的情况 


  原文        欢迎访问 我的博客
注意事项:

参考代码:

#include <stdio.h>
long int a[30];
long int b[30];
long int T;
int n;
long int sum=0;
void f(int long t,int pos,int i )
{int j;
   
if(t==T&&pos!=0&&i<1)//终止条件 注意全部遍历完再进行判断(防止 -1 1 -2 2 3 -3的特例) 并且 不能不选 
{sum++;
for(j=pos-1;j>=0;j--)//倒着遍历倒着输出 
printf("%ld ",b[j]);
printf("\n");
}
else
{  if(i<1)return ;//遍历到数组第一项还未满足t==T;则返回 
    
   f(t,pos,i-1);
    t+=a[i];b[pos]=a[i];
    f(t,pos+1,i-1);
    t-=a[i];
    
    
}
}
int main()
{
int i;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%ld",&a[i]);
scanf("%ld",&T);
f(0,0,n);
printf("%d\n",sum);
return 0;
}


 

0.0分

17 人评分

  评论区

  • «
  • »