高校实验室

 找回密码
 立即注册

手机号码,快捷登录

查看: 2046|回复: 2

[技术讨论] 蓝桥杯题-分糖果

[复制链接]

6

主题

23

帖子

575

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
575
发表于 2017-1-13 12:58:42 | 显示全部楼层 |阅读模式
题目:发糖果
有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
    每个小朋友都把自己的糖果分一半给左手边的孩子。
    一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
    反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
    你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
【格式要求】
    程序首先读入一个整数N(2<N<100),表示小朋友的人数。
    接着是一行用空格分开的N个偶数,表示n个糖(每个偶数不大于1000,不小于2)
    要求程序输出一个整数,表示老师需要补发的糖果数。
例如:输入
3
2 2 4
程序应该输出:
4

认真是可怕的力量!
回复

使用道具 举报

6

主题

23

帖子

575

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
575
 楼主| 发表于 2017-1-13 12:59:03 | 显示全部楼层
参考:
package class10;
import java.util.Scanner;



public class MyMain {
   public static void main(String args[]){
     
      //一、输入部分
          Scanner sc=new Scanner(System.in);
          int n=sc.nextInt();
         int i=0,b=0,count=0,x=0;
          int s[]=new int [n];
          for(i=0;i<n;i++){
             s[i]=sc.nextInt();
          }
         sc.close();
         
          //二、分糖果
         for(;;){
            //1、所有小孩分拿出一半的糖果
              for(i=0;i<n;i++){
                 s[i]=s[i]/2;
              }
             b=s[0];//变化前的第一个小朋友手里的糖果的一半保留
            
              //2、后面的小朋友的糖果拿一半给前面的孩子
              for(i=0;i<n-1;i++){
                 s[i]=s[i]+s[i+1];
             }
             s[n-1]=s[n-1]+b;//3、将第一个小朋友的糖果给最后一个小朋友
              
              //4、教师清点一下,奇数个的小朋友,并给他们每人一个糖果
             for(i=0,x=0;i<n;i++){
                 if(s[i]%2!=0){
                      s[i]=s[i]+1;
                      count++;
                  }
                 else {
                      x++;
                  }
             }
            
              //5、清点是否所有孩子的糖果都是一样,如果一样了。就停止运行
             for(i=0;i<n-1;i++){
                 if(s[i]!=s[i+1]){
                     x=0;
                  }
             }
             if(x==n){
                 System.out.println(count);
                  break;
              }
              
         }
     }

}
认真是可怕的力量!
回复 支持 反对

使用道具 举报

0

主题

1

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2017-1-13 16:46:30 | 显示全部楼层

import java.util.*;
public class Sugar {
static int m,sum=0,z=0;
public static void main(String[] args) {
    // TODO Auto-generated method stub
   Sugar hh =new Sugar();
Scanner sc= new Scanner(System.in);
System.out.println("请输入小孩子数量");
m=sc.nextInt();
System.out.println("请以顺时针输入小孩子的糖果数");
int[] x = new int[100];
int[] y = new int[100];

   for(int i=1;i<m+1;i++)   //x数组存放原始的糖果数,y进行糖果分发
  {
     x[i]=sc.nextInt();
    y[i]=x[i];  
  }  

      for(int l=1;l<m;)//判断每个小朋友糖果是否相等
      {
      if(x[l]==x[m])
        {l++;continue;}
           else
             {
            hh.fenfa(x,y);
          l=1;
          continue;
         }
           }
  System.out.println("老师需要发"+sum+"颗糖");
}
  
  
  
public void fenfa(int[] x,int[] y)//分发和加糖的方法

{    for(int n=1;n<m+1;n++) //分糖的方法
   {
     if(n!=m)
    y[n+1]=x[n]/2+y[n+1]/2;
     else
      y[1]=x[m]/2+y[1]/2;
   }      

  for(int k=1;k<m+1;k++) //加糖的方法
  {
     if(y[k]%2!=0)
     { y[k]=y[k]+1;
      sum=sum+1;
      }
       x[k]=y[k];
  }


}
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|使用帮助|edulab.cn ( 蜀ICP备17031667号-4 )

GMT+8, 2020-8-4 05:12 , Processed in 0.050377 second(s), 23 queries , Gzip On.

Powered by edulab.cn Licensed

© 2016-2099 辅助线 Inc.

快速回复 返回顶部 返回列表