能不能短一点,减少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]]









