#include <bits/stdc++.h>
using namespace std;
int a[105],used[105],n,m,len,minn=0,sum=0,bj;
inline bool cmp(int a, int b) {
return a>b;
}
inline int read() {
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
int x=0;
while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=getchar();
return x;
}
inline int max(int x, int y) {
return x>y?x:y;
}
inline void dfs(int k, int last, int rest) {
int i,j;
if(!(k^m)) {
bj=1;
return;
}
if(!rest) {
for(i=1;i<=n;i++)
if(!*(used+i)) {
*(used+i)=1;
break;
}
dfs(k+1,i,len-*(a+i));
}
for(i=last+1;i<=n;i++)
if(!*(used+i)&&rest>=*(a+i)) {
*(used+i)=1;
dfs(k,i,rest-*(a+i));
*(used+i)=0,j=i;
while(i<n&& !(*(a+i)^*(a+j))) i++;
if(!(i^n)) return;
}
}
int main(void) {
while(~scanf("%d",&n)&&n) {
memset(a,0,sizeof(a));
sum=0;
for(int i=1;i<=n;i++) *(a+i)=read(),minn=max(minn,*(a+i)),sum+=*(a+i);
sort(a+1,a+n+1,cmp);
int i,j;
for(i=minn;i<=sum;i++)
if(sum%i==0) {
memset(used,0,sizeof(used));
len=i,used[1]=1,bj=0,m=sum/i;
dfs(1,1,len-a[1]);
if(bj) {
printf("%d\n",len);
break;
}
}
}
return 0;
}
是不是指针优先级出问题了?