http://acm.hdu.edu.cn/showproblem.php?pid=1034

本文介绍了一个有趣的编程问题,即通过编程解决一个关于分享糖果的问题。问题中每个人会将自己一半的糖果传递给右边的人,直到每个人的糖果数量相等。文章提供了完整的解决方案和AC代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目意思:有输入N在第一行,然后接下来的有N行,分别是N个人的糖果数,而且老师一吹口哨,每个人都给自己右边的人二分之一自己的糖果数,如果分后糖果数量为奇数,则老师在给他一颗糖,直到每人的糖果数相等为止,问:这样老师要吹多少次口哨,并且此时糖果数为多少?

思路:首先由题可知:a[1]=a[1]/2+a[n]/2;则a[i]=a[i]/2+a[i-1]/2;这样循环,(直到i==n)为止。

一下为AC代码:注意循环时啊a[i]不可直接与前后数字相除,而是要转化下,为吧a[i]=b[i]/2;这样不易出错,当你没把啊a[i].转化时,可能会出错,我当时就出错了,结果就是对不到答案!因此,,,

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int a[1001],b[1001];
int main()
{
    int i,t,n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
            break;
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        int flag=1;int k=0;
     while(1)
        {
            k++;
            for(i=0;i<n;i++)//注意一下步骤!
            {
               b[i]=a[i]/2;//此处要注意!
            }
            for(i=1;i<n;i++)
            {
                a[i]=b[i]+b[i-1];
                if(a[i]%2!=0)
                    a[i]++;


            }
            a[0]=b[0]+b[n-1];//不要漏掉第一个人,和最后一个人。
            if(a[0]%2!=0)
                a[0]++;//接下来寻找出是否全相等!
            int t=a[0];
            for(i=1;i<n;i++)//注意应该从第二个人开始!
                if(t!=a[i])
            {
                flag=0;break;
            }
            if(flag)
            {
                printf("%d %d\n",k,t);
                break;
            }
            else
                flag=1;
            }
        }
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值