只要把题目意思理解了这也是道题很水的;题目的主要意思就是Sam 和Ella两个人当服务员,一个人顺时针,一个人逆时针开始上菜,如果能有一个位置,当两人在这个位置时,两人上的肉丸子数量相同,就记录这个位置为X,并输出“Sam stops at position X and Ella stops at position X+1.”
否则就输出“No equal partitioning.”
例如题目给出的例子:
5 9 4 2 8 3 :第一个数是代表后面有几个客人 如:5 代表后面有5个客人;然后就是每位客人叫的肉丸的数量。
当送到第二位客时Sam送的肉丸子数量为9+4=13;Ella送的肉丸数量为3+8+2=13(特别记住一个是顺时针,一个是逆时针,不过这和计算没啥关系,只是理解是要注意了)。
我的思路:
既然位置和顺序不能改变(只能从第一个客人开始送,不能从第二个客人开始送),那我们就可以将所有的肉丸数量计算出来sum,然后从第一个客人开始相加ans,如果ans<sum/2 则继续相加,如果ans=sum/2,就记录客人的位置X,输出“Sam stops at position X and Ella stops at position X+1.”如果ans>sum/2 或者 sum/2!=0就直接输出“No equal partitioning.”
下面就是我个人AC了的代码,只供参考:
#include"stdio.h"
#include"string.h"
int main()
{
int sum,a[1000],i,n,sum1;
while(scanf("%d",&n)&&n)
{
sum=0;sum1=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
if(sum%2!=0)printf("No equal partitioning.\n");
else
{sum/=2;
for(i=1;i<=n;i++)
{
sum1+=a[i];
if(sum1==sum){printf("Sam stops at position %d and Ella stops at position %d.\n",i,i+1);break;}
else if(sum1>sum){printf("No equal partitioning.\n");break;}
}
}
}
return 0;
}