报数游戏
2014-08-15 20:39
190 查看
Descriptionn个人站成一行玩一个报数游戏。所有人从左到右编号为1到n。游戏开始时,最左边的人报1,他右边的人报2,编号为3的人报3,等等。当编号为n的人(即最右边的人)报完n之后,轮到他左边的人(即编号为n-1的人)报n+1,然后编号为n-2的人报n+2,以此类推。当最左边的人再次报数之后,报数方向又变成从左到右,依次类推。为了防止游戏太无聊,报数时有一个特例:如果应该报的数包含数字7或者是7的倍数,他应当用拍手代替报数。下表是n=4的报数情况(X表示拍手)。当编号为3的人第4次拍手的时候,他实际上数到了35。给定n,m和k,你的任务是计算当编号为m的人第k次拍手时,他实际上数到了几。Input输入包含不超过10组数据。每组数据占一行,包含三个整数n,m和k(2<=n<=100, 1<=m<=n, 1<=k<=100)。输入结束标志为n=m=k=0。Output对于每组数据,输出一行,即编号为m的人第k次拍手时,他实际上数到的那个整数。Sample Input
4 3 1 4 3 2 4 3 3 4 3 4 0 0 0Sample Output
17 21 27 35
#include <cstdio>#include <iostream>using namespace std;bool f( int n ){if( !(n % 7) ) return true;while(n){if( n % 10 == 7 ) return true;n /= 10;}return false;}int main(){int n, m, k;while( scanf("%d %d %d", &n, &m, &k) !=EOF && n+m+k ){int cnt = 0, period = 2 * n - 2;if( n == m || m == 1 ){for( int i = m; ; i += period ) if( f( i ) ){cnt++;if( cnt == k ){printf("%d\n", i);break;}}}else{int next = 2 - m;for( int i = m; ; swap( next, i ) ){next += period;if( f( i ) ){cnt++;if(cnt == k){printf("%d\n", i);break;}}}}}return 0;}[/code]
相关文章推荐
- 报数游戏 湖南省第七届省赛
- 有N个人围成一圈做游戏,规则如下:从某一个人开始报数,依次报1,2,3,喊到3的人出局。
- 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去....直到剩下
- 湖南第七届省赛 报数游戏
- 计蒜客 奇怪的报数游戏(树状数组+二分+思路)
- B - 报数游戏
- toj 4316 报数游戏
- 【英雄会】报数游戏
- 英雄会报数游戏(3)实现
- 报数游戏(直接模拟法)
- 算法:报数游戏
- 1、两人做游戏,轮流报数,报出的数只能是1、2、3、4、5、6、7、8其中之一,把两个人报出的数连加起来,谁报数后加起来的和是123,谁就获胜,让你先报,为了确保胜利,你第一个数报多少?
- 英雄会(csdn pongo)题解之报数游戏3
- 报数游戏python 解答
- 湖南省第七届大学生计算机程序设计竞赛 报数游戏
- 编程题:报数游戏
- ccf-报数游戏
- 报数游戏
- CSDN 报数游戏-双向循环链表实现
- CSU_1101_报数游戏