题目链接:http://acm.fafu.edu.cn/problem.php?id=1072
组合的话由于数小于等于10,可以用穷举法,不过没有算法味道
#include <stdio.h> #include <string.h> int main(void) { int i, n, k, m, sum = 0; int a[10]; int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10; scanf("%d%d", &n, &k); for(i = 0;i < n; ++i) { scanf("%d", &a[i]); } switch (k) { case 1: for(i1 = 0; i1 < n; ++i1) { sum += a[i1]; } break; case 2: for(i1 = 0; i1 < n - 1; ++i1) { for(i2 = i1 + 1; i2 < n; ++i2) { sum += a[i1]*a[i2]; } } break; case 3: for(i1 = 0; i1 < n - 2; ++i1) { for(i2 = i1 + 1; i2 < n - 1; ++i2) { for(i3 = i2 + 1; i3 < n; ++i3) { sum += a[i1]*a[i2]*a[i3]; } } } break; case 4: for(i1 = 0; i1 < n - 3; ++i1) { for(i2 = i1 + 1; i2 < n - 2; ++i2) { for(i3 = i2 + 1; i3 < n - 1; ++i3) { for(i4 = i3 + 1; i4 < n; ++i4) { sum += a[i1]*a[i2]*a[i3]*a[i4]; } } } } break; case 5: for(i1 = 0; i1 < n - 4; ++i1) { for(i2 = i1 + 1; i2 < n - 3; ++i2) { for(i3 = i2 + 1; i3 < n - 2; ++i3) { for(i4 = i3 + 1; i4 < n - 1; ++i4) { for(i5 = i4 + 1; i5 < n; ++i5) { sum += a[i1]*a[i2]*a[i3]*a[i4]*a[i5]; } } } } } break; case 6: for(i1 = 0; i1 < n - 5; ++i1) { for(i2 = i1 + 1; i2 < n - 4; ++i2) { for(i3 = i2 + 1; i3 < n - 3; ++i3) { for(i4 = i3 + 1; i4 < n - 2; ++i4) { for(i5 = i4 + 1; i5 < n - 1; ++i5) { for(i6 = i5 + 1; i6 < n; ++i6) { sum += a[i1]*a[i2]*a[i3]*a[i4]*a[i5]*a[i6]; } } } } } } break; case 7: for(i1 = 0; i1 < n - 6; ++i1) { for(i2 = i1 + 1; i2 < n - 5; ++i2) { for(i3 = i2 + 1; i3 < n - 4; ++i3) { for(i4 = i3 + 1; i4 < n - 3; ++i4) { for(i5 = i4 + 1; i5 < n - 2; ++i5) { for(i6 = i5 + 1; i6 < n - 1; ++i6) { for(i7 = i6 + 1; i7 < n; ++i7) { sum += a[i1]*a[i2]*a[i3]*a[i4]*a[i5]*a[i6]*a[i7]; } } } } } } } break; case 8: for(i1 = 0; i1 < n - 7; ++i1) { for(i2 = i1 + 1; i2 < n - 6; ++i2) { for(i3 = i2 + 1; i3 < n - 5; ++i3) { for(i4 = i3 + 1; i4 < n - 4; ++i4) { for(i5 = i4 + 1; i5 < n - 3; ++i5) { for(i6 = i5 + 1; i6 < n - 2; ++i6) { for(i7 = i6 + 1; i7 < n - 1; ++i7) { for(i8 = i7 + 1; i8 < n; ++i8) { sum += a[i1]*a[i2]*a[i3]*a[i4]*a[i5]*a[i6]*a[i7]*a[i8]; } } } } } } } } break; case 9: for(i1 = 0; i1 < n - 8; ++i1) { for(i2 = i1 + 1; i2 < n - 7; ++i2) { for(i3 = i2 + 1; i3 < n - 6; ++i3) { for(i4 = i3 + 1; i4 < n - 5; ++i4) { for(i5 = i4 + 1; i5 < n - 4; ++i5) { for(i6 = i5 + 1; i6 < n - 3; ++i6) { for(i7 = i6 + 1; i7 < n - 2; ++i7) { for(i8 = i7 + 1; i8 < n - 1; ++i8) { for(i9 = i8 + 1; i9 < n; ++i9) { sum += a[i1]*a[i2]*a[i3]*a[i4]*a[i5]*a[i6]*a[i7]*a[i8]*a[i9]; } } } } } } } } } break; case 10: for(i1 = 0; i1 < n - 9; ++i1) { for(i2 = i1 + 1; i2 < n - 8; ++i2) { for(i3 = i2 + 1; i3 < n - 7; ++i3) { for(i4 = i3 + 1; i4 < n - 6; ++i4) { for(i5 = i4 + 1; i5 < n - 5; ++i5) { for(i6 = i5 + 1; i6 < n - 4; ++i6) { for(i7 = i6 + 1; i7 < n - 3; ++i7) { for(i8 = i7 + 1; i8 < n - 2; ++i8) { for(i9 = i8 + 1; i9 < n - 1; ++i9) { for(i10 = i9 + 1; i10 < n - 1; ++i10) { sum += a[i1]*a[i2]*a[i3]*a[i4]*a[i5]*a[i6]*a[i7]*a[i8]*a[i9]*a[i10]; } } } } } } } } } } break; default: break; } printf("%d\n", sum); return 0; }
#include<stdio.h> int m,n,a[15],ans=0; void dfs(int x,int k,int j) { if(k==m) { ans+=j; return; } if(x>n) return; dfs(x+1,k+1,j*a[x]); dfs(x+1,k,j); } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&a[i]); dfs(1,0,1); printf("%d\n",ans); return 0; }
能写出第一个代码,真的是太佩服我自己了~~~~(>_<)~~~~