POJ 1247 Magnificent Meatballs

只要把题目意思理解了这也是道题很水的;题目的主要意思就是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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值