a题求助 找不到错误的地方
#include<stdio.h>
#include<math.h>
int h=0;
int ans1=0;
void f(int a[],int n){
for(int i=0;i<n-1;i++)
for (int j=i+1;j<n;j++)
if(a[j]<a[i])
{
int p=a[i];
a[i]=a[j];
a[j]=p;
}
}
int p(int a[],int n){
int sum=0;
int sum1=0;
int ans=0;
for(int k=0;k<n;k++)
{
sum+=a[k];
}
int d=sum%3;
if (d==0) return 1;
for(int i=0;i<n;i++)
if(a[i]%3==d) return 2;
for(int i=0;i<n;i++)
for(int k=0;k<n;k++)
{sum =a[i]+a[k];
if(i!=k&&sum%3==d&&n!=2) ans++;
}
if(ans!=0) return 3;
return 4;
}
int main(){
int t;
int c[100];
scanf("%d",&t);
for(int x=0;x<t;x++){
int n;
scanf("%d",&n);
int sum1=0;
int sum=0;
int a[n];
int b[n];
for(int k=0;k<n;k++)
{
scanf("%d",&a[k]);
sum+=a[k];
}
int d=sum%3;
f(a,n);
switch(p(a,n)){
case 1:
for(int j=n-1;j>=0;j--)
sum1+=a[j]*pow(10,j);
break;
case 2:
for(int k=0;k<n;k++)
{
b[h]=a[k];
h++;
if(a[k]%3==d) h--;
}
for(int k=n-2;k>=0;k--)
sum1+=b[k]*pow(10,k);
break;
case 3:
if(d==1)
{
for(int k=0;k<n;k++)
{
b[h]=a[k];
h++;
if(ans1<2){
if(a[k]%3==2){
h--;ans1++;}
}}
for(int k=n-3;k>=0;k--)
sum1+=b[k]*pow(10,k);
}
else{for(int k=0;k<n;k++)
{
b[h]=a[k];
h++;
if(ans1<2){
if(a[k]%3==1){
h--;ans1++;}
}}
for(int k=n-3;k>=0;k--)
sum1+=b[k]*pow(10,k);
}
break;
case 4: sum1=-1;break;
}
c[x]=sum1;h=0;ans1=0;
}
for(int x=0;x<t;x++)
printf("%d\n",c[x]); }