前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【蓝桥杯备赛系列 | 真题 | 简单题】2014年第五届真题-分糖果

【蓝桥杯备赛系列 | 真题 | 简单题】2014年第五届真题-分糖果

作者头像
计算机魔术师
发布2023-02-02 15:20:22
2620
发布2023-02-02 15:20:22
举报
文章被收录于专栏:计算机魔术师计算机魔术师
在这里插入图片描述
在这里插入图片描述

🤵‍♂️ 个人主页: @计算机魔术师 👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

蓝桥杯竞赛专栏 | 简单题系列 (一) 作者: 计算机魔术师 版本: 1.0 ( 2022.1.18 )


摘要: 本文旨在准备明年2023的蓝桥杯竞赛,培养个人Java语法素养和手感。 希望可以帮助到一起备赛的小伙伴们。题目来自蓝桥杯刷题网

文章目录

前言:注意主类是 Main编辑器用ecilips

题目描述

有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。

你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。

输入格式

程序首先读入一个整数N(2< N< 100),表示小朋友的人数。 接着是一行用空格分开的N个偶数(每个偶数不大于1000,不小于2)

输出格式

要求程序输出一个整数,表示老师需要补发的糖果数。

样例输入

代码语言:javascript
复制
3 
2 2 4 

样例输出

代码语言:javascript
复制
4

个人思路:

主要需要实现的有几点 1、 小朋友分糖果 ( 这里我用链表来实现,主要考虑到如题所说的小朋友坐成一圈) 2、 判断每个小朋友是否糖果一样 ( 循环链表元素) 3、 判断糖果是否为奇数 (判断链表数据)

最终代码:

1.1 链表实现

代码语言:javascript
复制
import java.util.Scanner;

public class Main {

	/*
	 * description: linkList 
	 * author: AImagician
	 */
	public static class linkList {
		node head = null;

		public linkList() {   

		}

		public static class node {
			int data;
			node next;

			public node(int data) {
				this.data = data;
			}

			public node() {

			}
		}

		public void addNode(int value) {
			node newNode = new node(value);
			if(head == null) {
				head = newNode;
				return;
			}	
			else {
				node nextNode = head;
				while(nextNode.next != null) {
					nextNode = nextNode.next;
				}
				nextNode.next = newNode;
			}
		}
	}

	/*
	 * descriptions: judge array element is equal\ author: AImagician
	 */
	public static boolean isEqual(linkList.node head,int num) {
		boolean judge = true;
//		if (head.data != head.next.data)
//			judge = false;
		linkList.node tempnode = new linkList.node();
		tempnode = head;
		for (int i = 0; i < num - 1; i++) {
				if(tempnode.data != tempnode.next.data) {
					judge = false;	
				}
				tempnode = tempnode.next;
		}
		return judge;
	}

	/*
	 * descriptions: judge element is odd author: AImagician
	 */
	public static boolean isOdd(int figure) {
		boolean judge = false;
		if (figure % 2 != 0)
			judge = true;
		return judge;
	} 

	public static void main(String args[]) {
		Scanner read = new Scanner(System.in);
		int num = read.nextInt();
		linkList list = new linkList();
		for (int i = 0; i < num; i++) {
			if (read.hasNextInt())  // 读取数据
				list.addNode(read.nextInt());
		}
//		小朋友互换糖果 + 老師分發楊果
		linkList.node tempnode = new linkList.node();
		int tolCandy = 0;
		while(!isEqual(list.head,num)) { // 判断元素是否全部相等
			tempnode = list.head;
			for (int i = 0; i < num - 1; i++) {
				tempnode.data = tempnode.data/2 + tempnode.next.data/2;
				tempnode = tempnode.next;
			}
			tempnode.data = list.head.data/2 + tempnode.data/2;
			// 老师发糖
			tempnode = list.head;
			for (int i = 0; i < num ; i++) {
				if(isOdd(tempnode.data)) {
					tempnode.data += 1;
					tolCandy += 1;
				}
				tempnode = tempnode.next;
			}
		}
		System.out.print(tolCandy);
		read.close();
	}
}

就在我兴冲冲的跑去编译提交, 有个例错误!只对了80%,呃,

在这里插入图片描述
在这里插入图片描述

排查了一下,发现是在第一步 小朋友分糖果那部分有误, 用于循环分糖果,在最后一个小朋友得到第一个小朋友的一半糖果时,第一个小朋友已经变了,此时需要一个辅助空间存贮,斯国一!!!!!

在这里插入图片描述
在这里插入图片描述

但感觉没问题啊,而且这个很难排查,整体代码又臭又长,用链表实现的话,整体处理比较复杂,还是用数组吧😪

1.2 数组实现

代码语言:javascript
复制
package theBuleCup;
import java.util.Scanner;


public class 真题2014_分糖果_数组实现 {
	public static void main(String args[]) {
		Scanner reader = new Scanner(System.in);
		int num = reader.nextInt();
		int tolCandy = 0;
		int []array = new int[num];
		for(int i = 0;i<array.length;i++) {
			array[i] = reader.nextInt();
		}
		do {
			int temparray0 = array[0]; 
			for(int i = 0;i<array.length - 1;i++) {
				array[i] = array[i+1]/2 + array[i]/2;
			} //小朋友分糖果
			
			array[array.length - 1] = array[array.length - 1]/2 + temparray0/2;
			for(int i = 0;i<array.length;i++) {
				if(isOdd(array[i])) {
					array[i] += 1;
					tolCandy += 1;
				}
			}
		}
		while(!isEqual(array)); 
		System.out.print(tolCandy);
	}
	/*
	 * descriptions: judge array element is equal\ author: AImagician
	 */
	public static boolean isEqual(int array[]) {
		boolean judge = true;
		for (int i = 0; i < array.length - 1; i++) {
				if(array[i] != array[i+1]) {
					judge = false;	
				}
		}
		return judge;
	}

	/*
	 * descriptions: judge element is odd author: AImagician
	 */
	public static boolean isOdd(int figure) {
		boolean judge = false;
		if (figure % 2 != 0)
			judge = true;
		return judge;
	} 
}
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1.1 链表实现
  • 1.2 数组实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档