解题思路:
都遍历一遍 ;对于数组里的值 只有两种情况 要么取 要么不取 通过回溯 法遍历每一种情况
根据要求 预先不考虑 数组后面 的数字 因此需倒着遍历并且先遍历不取再遍历取的情况
#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分
16 人评分
C二级辅导-求偶数和 (C语言代码)浏览:605 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:533 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:758 |
C语言训练-素数问题 (C语言代码)浏览:994 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:623 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:603 |
C语言训练-排序问题<1> (C语言代码)浏览:599 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:545 |
罗列完美数 (C语言代码)浏览:491 |
理财计划 (C语言代码)浏览:467 |