澄澈i


私信TA

用户名:Edwinwzy

访问量:750

签 名:

等  级
排  名 13551
经  验 860
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业 电子信息工程

  自我简介:

解题思路:

基本思路是采用两个数组,一个存放输入的初始数组a[105],一个存放初始数组的一半b[105]。当然,a和b数组的值会一直更新。

因为题目是把糖果给左边的小孩,所以就相当于在b数组中存放的数据对于a数组来说是整体向左移动一格。这意味着循环的时候,可以从1开始,而非从0开始。

所以每一次给糖果,就是把a和b数组对应的格子的值相加,当为a的第N格时候,这时候a数组加的是b数组的第一个,因为第一个小孩的糖果的一半要给左边的小孩,那第一个的左边只能是最后一个。

注意事项:


数组一定要初始化,不然会陷入死循环,输出错误等问题。


参考代码:

#include<iostream>
using namespace std;
int main()
{
    int N;
    int a[105]={0};//初始数组
    int b[105]={0};//初始数组的一半
    int count=0;//老师给的糖果数
    int flag=1;//标志位
    cin>>N;
    for(int i=1;i<=N;i++)//注意我的每个for循环的开始都是从i=1开始,原因在最开始说过了
    {
        cin>>a[i];
    }
    while(flag)
    {
        for(int i=1;i<=N;i++)//这个for循环是实现a数组的每个值减半并赋值给b数组的对应格子 ,
        {
            a[i]/=2;
            b[i-1]=a[i];
            
        }
        for(int i=1;i<=N;i++)
        {
            if(i==N)a[i]+=b[0];//如果循环到最后一格,那么它得到的糖果应该是第一个给的糖果,所以是+b[0]
            else a[i]+=b[i];//其他情况就是对应格子相加
            if(a[i]%2!=0)//判断a数组对应格的值是否为偶数,不是则老师发糖count++
            {
                a[i]++;
                count++;        
            }
            
        }
        for(int k=1;k<=N;k++)
        {
            if(a[k]==a[k+1])
            {
                if(k==N-1)    flag=0;//判断每个是否相等,判断成功则标志位置0,用于跳出while循环
                continue;
            }
            else break;
        }
    }
    cout<<count;
}


 

0.0分

1 人评分

  评论区