解题思路:
首先要清楚这个题目的要求:

  1. 分开糖果的这个动作是同时进行的,也就是说,第一个传给第二个人的同时,第二个也在传给第三个,第三个又传给....直到最后一个传给第一个人。

  2. 可以用两个数组来进行解题,一个用来变化,一个用来储存,因为在变化的同时,还要用到原先的数目(希望读者首先理解题意)。
    注意事项:

    在进行赋值变化的时候,注意要用原先没有发生变化的数值,不能只作用在一个数组上,否则就会造成用新变化的数去计算的结果,导致出现BUG。

    参考代码:


#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include<math.h>

#define MAX 100

int main() {

int n = 0;

int arr[MAX]={0};

int i,j,k;

int b[MAX]={0};

int flag=0;

int count = 0;

scanf_s("%d\n", &n);

for (i = 0; i < n; i++) {

scanf_s("%d", &arr[i]);

}

for (j = 0; j < n; j++) {

b[j] = arr[j];

}

while (1) {

flag = 0;

for (i = 0; i < n-1; i++) {

arr[i + 1] = b[i] / 2 + b[i + 1] / 2;

}

if (i == n - 1) {

arr[0] = b[n - 1] / 2 + b[0] / 2;

}

for (i = 0; i < n; i++) {

if (arr[i] % 2 != 0) {

count++;

arr[i] += 1;

}

}

for (i = 1; i < n; i++) {

if (arr[0]!= arr[i])

flag = 1;

}

if (flag == 0)//给我的教训就是如果紧挨着判断条件的值一样,那么很有可能出BUG

break;

for (j = 0; j < n; j++) {

b[j] = arr[j];

}

}

printf("%d", count);

return 0;

}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论