蓝桥杯历届试题:分糖果 java实现 - Go语言中文社区

蓝桥杯历届试题:分糖果 java实现


话不多说先上题~~
在这里插入图片描述
这一题相对其他绝大多数题来说相对简单以下是java代码

import java.util.Scanner;

//历届试题 分糖果
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		
		//输入目标数据
		int N = in.nextInt();
		
		int arr[] = new int[N];
		int medArr[] = new int[N];
		
		//完成初始化
		for(int i = 0; i < N ; i++) {
			arr[i] = in.nextInt();
		}
		
		//标记元素
		boolean flag = false;
		
		//变换次数
		int num = 0;
		
		while(flag == false) {
			
			flag = true;
			//将目标数组的一半存入中间数组,目标数组减半,并判断数组中的元素是否相同
			for(int i=0;i<N;i++) {
				medArr[i] = arr[i]/2;
				arr[i] = arr[i]/2;
				
				//检测是否在数组中的元素完全相同
				if(medArr[0] != medArr[i]) {
					flag = false;
				}
			}
			
			//执行变换
			for(int i=N-1;i>=0;i--) {
				//当i等于N-1时
				if(i == N-1) {
					arr[i] = arr[i]+medArr[0];
					//老师分给他一颗糖
					if(arr[i]%2 == 1) {
						arr[i]++;
						num++;
					}
				}else {
					arr[i] = arr[i]+medArr[i+1];
					//老师分给他一颗糖
					if(arr[i]%2 == 1) {
						arr[i]++;
						num++;
					}
				}
			}
			
		}
		//输出最终老师分的糖数
		System.out.println(num);
	}
}

这是系统判定结果:
在这里插入图片描述
根据代码的结构很明显,for循环中嵌套了两个循环,而第一个循环用来赋值并判断数组元素是否相等;第二个循环则是用来执行“分糖果”操作,用num变量记录老师所给出的糖果数。

这里需要注意的是,我用的并不是循环链表,而是一下子脑海中想起的最简单的数组,所以在对第一个数组元素和最后一个数组元素进行分糖果时需要注意算法,当然如果你运用的是循环链表,那可能比这要简单的多。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/a1106103430/article/details/88250398
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 14:20:13
  • 阅读 ( 852 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢