能不能短一点,减少for语句的使用
程序代码:
/*------------------------------------------------------------------------------ 依据题意,用全排列写了这么个程序,不过,运行起来可是够慢的了。 如果把宏中的 N 值改为10,那样能快些。 ------------------------------------------------------------------------------ 希望有高手写出更好的算法来解决这个问题。 ------------------------------------------------------------------------------*/ #include <stdio.h> #define SWAP(a,b) { int t=a;a=b;b=t;} #define N 22 #define n 7 int a[N]; int x; void SORT(int k) { int i; if((k+1==n)&&(a[0]+2*a[1]+3*a[2]+4*a[3]+5*a[4]+6*a[5]+7*a[6]==x)) { printf("%d =1*%d + 2*%d + 3*%d + 4*%d + 5*%d + 6*%d + 7*%d\n", x,a[0],a[1],a[2],a[3],a[4],a[5],a[6]); return ; } for(i=k+1;i<N;++i) { SWAP(a[k+1],a[i]); SORT(k+1); SWAP(a[k+1],a[i]); } } int main(void) { int i; printf("input x:\n"); scanf("%d",&x); for(i=0;i<N;++i) a[i]=i+1; SORT(0); return 0; }
[[it] 本帖最后由 广陵绝唱 于 2008-12-3 23:40 编辑 [/it]]