一群人围坐成一圈玩报数的游戏。游戏规则是: 从1开始报数,若遇到7的倍数或者个位为7的数则击掌代替,若犯错则要受罚。 可是这些人都太聪明了,竟然没人犯错!请问同样聪明的你,当报数到 n 时,总击掌次数 c 是多少?
时间: 2023-11-17 15:43:28 浏览: 88
当报数到 n 时,总击掌次数 c 可以通过以下公式计算:
c = (n/7) * 2 + min(n\%7, 1) + (n/10) - (n/70)
其中,(n/7) * 2 表示 7 的倍数时的击掌次数,min(n\%7, 1) 表示个位数为 7 时的击掌次数(最多为 1 次),(n/10) 表示十位数为 7 时的击掌次数,(n/70) 表示既是 7 的倍数又是个位数为 7 的数时重复计算的次数,需要减去。
例如,当 n = 100 时,总击掌次数 c = (100/7) * 2 + min(100\%7, 1) + (100/10) - (100/70) = 28 + 1 + 10 - 1 = 38。
相关问题
一群人围坐成一圈玩报数的游戏。游戏规则是: 从1开始报数,若遇到7的倍数或者个位为7的数则击掌代替,若犯错则要受罚。 可是这些人都太聪明了,竟然没人犯错!请问同样聪明的你,当报数到 n 时,总击掌次数 c 是多少?
当报数到 n 时,总击掌次数 c 可以通过以下公式计算:
c = (n/7) * 2 + min(n\%7, 1) + (n/10) - (n/70)
其中,(n/7) * 2 表示 7 的倍数时的击掌次数,min(n\%7, 1) 表示个位数为 7 时的击掌次数(最多为 1 次),(n/10) 表示十位数为 7 时的击掌次数,(n/70) 表示既是 7 的倍数又是个位数为 7 的数时重复计算的次数,需要减去。
例如,当 n = 100 时,总击掌次数 c = (100/7) * 2 + min(100\%7, 1) + (100/10) - (100/70) = 28 + 1 + 10 - 1 = 38。
设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的
人开始重新报数,直到最后只剩下一个人为止。这个问题可以使用数学归纳法来解决。首先考虑边界情况,当n=1时,只剩下一个人,他就是最后留下的人。接下来考虑一般情况下的解法。
假设当n=k时,解的编号为f(k, m),即表示k个人围坐在圆桌周围,数到第m的人出列后,最后留下的人的编号为f(k, m)。下面考虑当n=k+1时的情况。
我们可以将n=k+1的问题转化为n=k的问题。假设在n=k的问题中,解的编号为x,则在n=k+1的问题中,解的编号为(x+m-2)%k+1,即将索引号从1开始重新编号。证明如下:
设x'为n=k+1的问题中数到第m的人出列后的最后留下的人的编号,根据问题要求,我们知道x'为第x个人数到m+1的人的编号。根据环形的特性,当数到第m+1的人时,其实就等于数到第1个人,所以第x个人就是第x'个人数到第m+1的人。
根据上面的分析,我们知道当n=k+1时,解的编号为(x+m-2)%k+1。而当n=1时,最后留下的人的编号为f(1, m)=1。将上述推导过程结合起来,我们可以得到递推公式:
f(1, m) = 1
f(k, m) = (f(k-1, m) + m - 2) % k + 1
利用递推公式,我们可以求解出f(n, m)。这个问题通常被称为约瑟夫环问题,已经有很多解法被提出,在时间复杂度和空间复杂度上有所差异。