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

news2024/9/27 15:25:16

在这里插入图片描述

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

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

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

文章目录

    • 1.1 链表实现
    • 1.2 数组实现

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

题目描述

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

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

输入格式

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

输出格式

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

样例输入

3 
2 2 4 

样例输出

4

个人思路:

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

最终代码:

1.1 链表实现

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 数组实现

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;
	} 
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/170302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【博客597】iptables如何借助连续内存块通过xt_table结构管理流量规则

iptables如何借助连续内存块通过xt_table结构管理流量规则 1、iptables 分为两部分&#xff1a; 用户空间的 iptables 命令向用户提供访问内核 iptables 模块的管理界面。内核空间的 iptables 模块在内存中维护规则表&#xff0c;实现表的创建及注册。 2、iptables如何管理众…

第十二章 数据库设计

前言 本文章为看视频所写。 视频链接&#xff1a;168. 14.1 数据库设计前言_哔哩哔哩_bilibili 目录 前言 章节提要 一、数据库设计过程 二、E-R模型 三、答题技巧 四、案例分析 1、案例1 二、案例2 章节提要 一、数据库设计过程 ER模型&#xff1a;是实体联系模型&#x…

第一章 数据结构绪论

数据结构&#xff1a;是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象&#xff0c;以及它们之间关系和操作等相关问题的学科。程序设计数据结构算法数据&#xff1a;是描述客观事物的符号&#xff0c;是计算机中可…

2.2、进程的状态与转换

整体框架 1、三种基本状态 进程是程序的一次执行。在这个执行过程中&#xff0c;有时进程正在被 CPU 处理&#xff0c;有时又需要等待 CPU 服务&#xff0c; 可见进程的状态是会有各种变化。 为了方便对各个进程的管理&#xff0c;操作系统需要将进程合理地划分为几种状态 ①…

随机梯度下降法的数学基础

梯度是微积分中的基本概念&#xff0c;也是机器学习解优化问题经常使用的数学工具&#xff08;梯度下降算法&#xff09;。因此&#xff0c;有必要从头理解梯度的来源和意义。本文从导数开始讲起&#xff0c;讲述了导数、偏导数、方向导数和梯度的定义、意义和数学公式&#xf…

SpringBoot-自动配置-切换内置web服务器

SpringBoot-自动配置-切换内置web服务器 介绍 SpringBoot的web环境中默认使用tomcat作为内置服务器其实SpringBoot提供了4种内置服务器供我们选择分别为&#xff1a;Jetty&#xff0c;Netty&#xff0c;Tomcat&#xff0c;Undertow我们可以很方便的进行切换 实例演示 在pom文件…

简单了解操作系统、进程内存管理

目录 前言&#xff1a; 一、操作系统&#xff1a; 操作系统的定位&#xff1a; 应用程序&#xff1a; 系统调用&#xff1a; 操作系统内核&#xff1a; 驱动程序&#xff1a; 硬件设备&#xff1a; 二、进程&#xff1a; 什么是进程&#xff1f; 进程的描述与组…

自定义类型,结构体、枚举、联合(C语言)

目录 结构体 结构体的基础知识&#xff1a; 结构体的声明&#xff1a; 特殊声明&#xff1a; 结构体的自引用 结构体变量的定义和初始化 结构体内存对齐&#xff1a; 修改默认对齐数&#xff1a; 结构体传参 结构体的柔型数组 柔型数组的书写 柔性数组的特点 柔性数组的使用 柔…

【Java寒假打卡】JavaWeb-Tomcat

【Java寒假打卡】JavaWeb-Tomcat服务器Tomcat下载和安装Tomcat的目录结构基本使用控制台乱码的问题IDEA集成TomcatJavaWeb项目的目录结构Tomcat-idea发布项目Tomcat-WAR包发布项目Tomcat配置文件的介绍Tomcat配置虚拟目录Tomcat配置虚拟主机服务器 Tomcat下载和安装 将下载好的…

干货 | 数据安全和个人信息保护审计的方法研究

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分&#xff1a;概述我们的研究核心是个人信息保护合规审计&#xff0c;具体指个人信息处理活动是否遵守我国相关法律法规的监督性审计。在个保法出台后&#xff0c;我国形成了以内部审计为…

我用ChatGPT写神经网络:一字不改,结果竟很好用

自从去年底推出以来&#xff0c;对话式 AI 模型 ChatGPT 火遍了整个社区。 ChatGPT 的确是一个了不起的工具&#xff0c;就像一个「潘多拉魔盒」。一旦找到正确的打开方式&#xff0c;你或许会发现&#xff0c;自己再也离不开它了。 作为一个全能选手&#xff0c;人们给 Chat…

Fedora 38发布Budgie与Sway定制版

导读两款新的 Fedora 定制版将在 Fedora 38 发布时首次亮相。我们期待着它们在 Fedora 37 时出现&#xff0c;但在 Fedora 38 中终于来了&#xff01; 早在 2022 年 5 月&#xff0c;Budgie 项目的主要开发者 Joshua Strobl ​​宣布​​&#xff0c;Budgie 已被提交到 Fedora…

第五届字节跳动青训营 前端进阶学习笔记(四)TypeScript入门

文章目录前言TypeScript概要1.什么是TypeScript2.TypeScript基本语法基础数据类型对象类型函数类型函数重载数组类型补充类型泛型约束和泛型默认参数类型别名和类型断言高级类型1.联合类型2.交叉类型3.类型守卫类型谓词总结前言 课程重点&#xff1a; TypeScript概要TypeScri…

Kubernets核心介绍及实战

1、资源创建方式 命令行YAML 2、Namespace 名称空间用来隔离资源 “namespace"通常被翻译为「命名空间」&#xff0c;听起来好像比较抽象&#xff0c;其实重点是在这个"space”。它和描述进程的虚拟地址空间的address space一样&#xff0c;都是提供一种独占的视角…

linux引导和启动程序

1.BIOS/Bootloader: 一上电&#xff0c;硬件强制让cpu的cs:ip寄存器指向bios程序的位置&#xff0c;从bios程序开始执行&#xff0c;由pc机的BIOS &#xff08;0xFFFFO是BIOs存储的总线地址&#xff09;把bootsect从某个固定的地址拿到了内存中的某个固定地址&#xff08;0x90…

SpringAMQP快速入门

介绍Spring AMQP 项目将核心 Spring 概念应用于基于 AMQP 的消息传递解决方案的开发它提供了一个“模板”作为发送和接收消息的高级抽象它还通过“侦听器容器”为消息驱动的 POJO 提供支持这些库促进了 AMQP 资源的管理&#xff0c;同时促进了依赖注入和声明性配置的使用包含两…

纷享销客华为云CXO思享会华东系列活动成功举办!

3天&#xff0c;3座城市&#xff0c;5家标杆企业&#xff0c;11位不同领域的专家&#xff0c;超百位企业家云集。1月10日-13日&#xff0c;纷享销客与华为云联合举办的“数字创新 高效增长”CXO思享会华东系列活动成功举办。全国各地超百名企业家齐聚华东参与本次思享会&#x…

kubeasz安装kubernetes1.25.5

kubeasz安装k8s 1 配置 kubeasz安装kubernetes&#xff0c;只需要做好网通配置&#xff0c;做好ssh免密通信配置即可 1.1 环境介绍 OS&#xff1a;CentOS Linux release 8.5.2111 机器: IPhostname10.104.10.201k8s-master10.104.10.202k8s-node 所有机器&#xff0c;都将…

3-4存储系统-虚拟存储器(CO)

文章目录一.页式存储1.页式存储系统2.逻辑地址到物理地址的转换3.页表4.快表TLB二.虚拟存储器&#xff08;一&#xff09;页式虚拟存储器&#xff08;二&#xff09;段式虚拟存储器&#xff08;三&#xff09;段页式虚拟存储器一.页式存储 1.页式存储系统 为提高主存的空间利…

JS中的splice方法添加或删除数组中的元素

splice方法嘚吧嘚语法下标问题实战splice(index)splice(index,howmany)示例一(howmany&#xff1e;0)示例二(howmany ≤ 0)splice(index,howmany,item1,.....,itemX)howmany ≤ 0示例一(index ≥ 0)示例二(index&#xff1c;0)howmany&#xff1e;0示例一(index ≥ 0)示例二(in…