原题链接:蓝桥杯2014年第五届真题-分糖果
解题思路: 在分糖果的时候一定是原来有的 每一轮单独算 一定要注意最后一个数是第一个和自身除以2 而第一个数会在循环中进行计算 为防止覆盖数据 要在循坏外部调整好数据的计算和区分 最后在利用set(集合)的特点进行判断是不是每个人完全一样 具体可看代码!
参考代码:
n=int(input()) list01=list(map(int,input().split())) # 记录糖果数 c=0 # 数组长度 l=len(list01) def count(): ''' 此函数用来进行学生间给糖 即 给以此左边的一半 ''' global l # 用来暂时记录数组最后一个数字 防止覆盖 temp=list01[l-1] # 最后一个数 防止第一个数在计算过程中覆盖原来的 单独计算 list01[l-1] = (list01[l-1]+list01[0])//2 for i in range(l): if i+1 < l-1: # 因为是圆形座位 所以要进行重复的赋值 list01[i]=(list01[i]+list01[i+1])//2 elif i==l-2: # 倒数第二个数字用之前未覆盖的最后一位数进行计算 list01[i]=list01[i]//2+temp//2 check_candynum(list01) def check_candynum(m): ''' 此函数进行数目判断 ''' global c # 集合的长度如果为1 说明只有1个数 全是一样的 if len(set(list01))==1: print(c) else: teacher_reput() def teacher_reput(): ''' 此函数用来表示 老师重新补充的糖果数 ''' for j in range(len(list01)): global c if list01[j] % 2 == 1: list01[j]+=1 c+=1 count() # 进行调用 count()
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复