这是JOJ上的1605题 好象是 记不太清了
算法写的不是很精简 但用这种方法大概也就是这样
#include <stdio.h>
int main()
{
int q[34]={0};
int p[50]={0};
int n,m,u;
int i;
int ii=0;
int b;
int e;
int we;
int w=0;
int j=1;
n=0;m=0;u=0;
for(i=3;i<6;i++)
{
p[i]=j;
j++;
}
for(i=10;i<13;i++)
{
p[i]=j;
j++;
}
for(i=15;i<36;i++)
{
p[i]=j;
j++;
}
for(i=38;i<41;i++)
{
p[i]=j;
j++;
}
for(i=45;i<48;i++)
{
p[i]=j;
j++;
}
scanf("%d",&b);
for(we=0;we<b;we++)
{
for(i=0;i<34;i++)
{q[i]=0;}
scanf("%d",&e);
while(e)
{
q[e]=1;
scanf("%d",&e);
}
if(ii==0)
printf("HI Q OUTPUT/n");
ii=1;
while(1)
{
for(i=0;i<48;i++)
{
if(p[i]!=0&&q[p[i]]!=0)
{
if((i-7)>0&&q[p[i-7]]!=0&&(i-14)>0&&q[p[i-14]]==0)
{
if(u<=p[i-14]){m=p[i];n=p[i-7];u=p[i-14];}
}
if((i+7)<49&&q[p[i+7]]!=0&&(i+14)<49&&q[p[i+14]]==0)
{
if(u<=p[i+14]){m=p[i];n=p[i+7];u=p[i+14];}
}
if((i-1)%7!=0&&q[p[i-1]]!=0&&(i-2)%7!=0&&q[p[i-2]]==0)
{
if(u<=p[i-2]){m=p[i];n=p[i-1];u=p[i-2];}
}
if(i%7!=0&&q[p[i+1]]!=0&&(i+1)%7!=0&&q[p[i+2]]==0)
{
if(u<=p[i+2]){m=p[i];n=p[i+1];u=p[i+2];}
}
}
}
if(u==0)break;
q[u]=1;
q[m]=0;
q[n]=0;
u=0;n=0;m=0;
}
for(i=1;i<48;i++)
{
if(q[p[i]]==1)w=w+p[i];
}
printf("%d/n",w);
w=0;
}
printf("END OF OUTPUT/n");
return 0;
}