话不多说先上题~~
这一题相对其他绝大多数题来说相对简单以下是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变量记录老师所给出的糖果数。
这里需要注意的是,我用的并不是循环链表,而是一下子脑海中想起的最简单的数组,所以在对第一个数组元素和最后一个数组元素进行分糖果时需要注意算法,当然如果你运用的是循环链表,那可能比这要简单的多。