有n20几个小朋友围成一圈坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏

扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
有若干名小朋友,第一名小朋友的糖果比第二名小朋友的糖果多2块,第二名小朋友的糖果比第三名小朋友的糖果多2块,…,即前一名小朋友总比后一名小朋友多2块糖果.他们按次序围成圆圈做游戏,从第一名小朋友开始给第二名小朋友2块糖果,第二名小朋友给第三名小朋友4块糖果,…,即每一名小朋友总是将前面传来的糖果再加上自己的2块传给下一名小朋友,当游戏进行到某一名小朋友收到上一名小朋友传来的糖果但无法按规定给出糖果时,有两名相邻小朋友的糖果数的比是13:1,问最多有多少名小朋友?
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
设有n名小朋友,共传k圈(最后一名传k-1圈),中断时各人手中糖数为a.先研究a的取值,0中断(最后一名手中无糖可传)时,an=2nk-2an-1=0,a1=2n-4;1中断(最后一名手中只有一块糖)时,an=2nk-1,an-1=1,a1=2n-3.分六种情况讨论:(1)0中断,an:an-1=13:1,即=,显然无解;(2)0中断,an:a1=13:1,即==>26n-52=2nk-2=>n(13-k)=25,可得n=25,k=12(n=5,k=8舍去);(3)0中断,a1:an=13:1,即==>26nk-26=2n-4=>n(13k-1)=11,无整数解;(4)1中断,an:an=13:1,即==>2nk-1=13=>nk=7,可得n=7,k=1(n=1,k=7舍去);(5)1中断,an:an=13:1,即==>26n-39=2nk-1=>n(13-k)=19,可得n=19,k=12;(6)1中断,a1:an=13:1,即==>26nk-13=2n-3=>n(13k-1)=5,无整数解.由以上分析可得,最多有25位小朋友.答:最多有25名小朋友.
为您推荐:
其他类似问题
设有n名小朋友,共传k圈(最后一名传k-1圈),中断时各人手中糖数为a.先研究a的取值,0中断(最后一名手中无糖可传)时,an=2nk-2an-1=0,a1=2n-4;1中断(最后一名手中只有一块糖)时,an=2nk-1,an-1=1,a1=2n-3.分这六种情况进行讨论,根据n、k的取值为整数,找出可能的人数即可求解.
本题考点:
哈密尔顿圈与哈密尔顿链.
考点点评:
本题较复杂,根据中断时最后一名手中糖的数量分情况进行讨论求解.
扫描下载二维码蓝桥杯:分糖果 JAVA - 你不知道你不知道的事 - CSDN博客
蓝桥杯:分糖果 JAVA
蓝桥杯算法题
  有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:
  每个小朋友都把自己的糖果分一半给左手边的孩子。
  一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。
  反复进行这个游戏,直到所有小朋友的糖果数都相同为止。
  你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。
输入格式
  程序首先读入一个整数N(2&N&100),表示小朋友的人数。
  接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)
输出格式
  要求程序输出一个整数,表示老师需要补发的糖果数。
public class Main {
static int addSweet=0;
//初始化补发的糖果数
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
//获取学生数
int student=input.nextInt();
//定义每个人的糖果数数组
int[] sweet=new int[student];
for (int i = 0; i & sweet. i++) {
sweet[i]=input.nextInt();
//定义分出的糖果数组
int[] temp=new int[student];
//while循环
while(true){
//执行糖果变化的方法
chang(sweet,temp);
//执行检查是否相同
if(check(sweet)){
System.out.println(addSweet);
//执行补发糖果的操作,传补发糖果数,返回是否进行补发,判断为没有补发break循环
add(sweet);
//执行检查是否相同
if(check(sweet)){
System.out.println(addSweet);
* 检查糖果是否相同
* @param sweet
public static boolean check(int[] sweet) {
// TODO Auto-generated method stub
boolean flag=
//初始化判断都相同
for (int i = 0; i & sweet. i++) {
for (int j = 0; j & sweet. j++) {
if(sweet[i]!=sweet[j]){
//产生了不同
* 改变糖果的数量
* @param sweet
* @param temp
public static void chang(int[] sweet, int[] temp) {
//数组每个除以2
for (int i = 0; i & sweet. i++) {
sweet[i]=sweet[i]/2;
//遍历存进temp数组里
temp[i]=sweet[i];
for (int i = 0; i & sweet. i++) {
//当最后一个的时候跟第一个拿
sweet[i]=sweet[i]+temp[temp.length-1];
//这是选择发生的事件
sweet[i]=sweet[i]+temp[i-1]; //补充糖果
* 补充奇数的糖果
* @param sweet
* @param addSweet2
public static void add(int[] sweet) {
//循环判断,如果是奇数,补充一个糖果,添加计数
for (int i = 0; i & sweet. i++) {
if(sweet[i]%2!=0){
sweet[i]++;
addSweet++;
我的热门文章 上传我的文档
 下载
 收藏
多年一线物理教学 多年一线物理教学
多年一线物理教学
 下载此文档
蓝桥杯题库的历届真题
下载积分:1200
内容提示:蓝桥杯题库的历届真题
文档格式:DOCX|
浏览次数:97|
上传日期: 11:11:50|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1200 积分
下载此文档
该用户还上传了这些文档
蓝桥杯题库的历届真题
关注微信公众号}

我要回帖

更多关于 一些小朋友排成一行 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信