题目意思难懂一些,懂了就过来。
一共有5座山,每座山有很多的蘑菇,给你一个n表示已经采了n座山上的蘑菇,求最多带回去多少蘑菇。。
当采完5座山后,有三个人要走三个袋子,这三个的袋子的蘑菇数量为1024的倍数,如果没有三个袋子的蘑菇数目满足情况,则收回5个袋子,即不能带走任何蘑菇。
并且回家的路上有人偷蘑菇,一周偷,直到你总蘑菇数不大于1024;
分析:
如果是n小于4,至少有2座山的蘑菇没有采,则肯定有三个袋子总数够1024,所以最多带1024回家。
n=4时,可能有三个袋子蘑菇数=1024,如果没有,取剩下两个的最大值。其他两个再加上最后一座山采的够1024;
如果有,则肯定可以带1024个(最后一座山多采点)。
n=5,如果有三个袋子蘑菇数的和%1024==0,则取最大剩余。
没有的话,肯定被没收所有的袋子,ans=0;
#include"stdio.h"
#include"string.h"
int main()
{
int n;
int A[5];
int i,j,k;
while(scanf("%d",&n)!=-1)
{
for(i=0;i<n;i++)
scanf("%d",&A[i]);
if(n<4)printf("1024\n");
else if(n==4)
{
int t;
int ans;
ans=0;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
t=A[i]+A[j];
while(t>1024)t-=1024;
if(t>ans)ans=t;
}
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
for(k=j+1;k<n;k++)
if((A[i]+A[j]+A[k])%1024==0)ans=1024;
}
}
printf("%d\n",ans);
}
else if(n==5)
{
int t;
int sum;
int ans;
ans=0;
sum=A[0]+A[1]+A[2]+A[3]+A[4];
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
for(k=j+1;k<n;k++)
{
if((A[i]+A[j]+A[k])%1024==0)
{
t=sum-A[i]-A[j]-A[k];
while(t>1024)t-=1024;
if(ans<t)ans=t;
}
}
}
}
printf("%d\n",ans);
}
}
return 0;
}