3426.糖果分享游戏
⭐️难度:简单
⭐️类型:模拟
📖题目:题目链接

⭐️思路:
以{2,4,6,8}为例,打下表:

步骤:
1、用一个v2数组存糖果数,避免分享时覆盖原来数据;
2、分享时记得减去一半,然后再加上左边小朋友的一半,也就是+ (v2[index] / 2);
3、每完成一轮分享就检查一次是否相等。
📚题解:
cpp
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<vector> // vector不需要.h
#include<list>
using namespace std;
bool panduan(vector<int> v) {
int size = v.size();
int num = v[0]; // 取一个元素进行判断:是否每一个元素都相等
for (int i = 0; i < size;i++) {
if (v[i] != num) {
return false;
}
}
return true;
}
void share(vector<int>& v) { // 使用c++的引用
// 注意:是在原先拥有的糖果数上进行分享,将糖果数先复制一份到v2
vector<int> v2 = v;
int size = v.size();
for (int i = 0;i < size;i++) {
int index;
if (i == 0) {
index = size - 1;
}
else {
index = i - 1;
}
v[i] = (v[i] / 2) + (v2[index] / 2);
}
for (int i = 0;i < size; i++) { // 糖果数是奇数的话:再+1
if (v[i] % 2 == 1) {
v[i]++;
}
}
}
int main() {
int n = 0;
while (scanf("%d", &n) != EOF) {
if (n == 0) {
break;
}
vector<int> v(n);
for (int i = 0;i < n; i++) {
scanf("%d",&v[i]);
}
int res = 0;
while(panduan(v) == false) {
share(v);
res++;
}
printf("%d %d\n", res, v[0]);
}
return 0;
}
⭕️注意:

