您的位置:首页 > 其它

湖南11省赛【B】 报数游戏

2014-05-19 08:51 260 查看
n个人站成一行玩一个报数游戏。所有人从左到右编号为 1到 n。游戏开始时,最左边的人报 1,他右边的人报 2,编号为 3的人报 3,等等。当编号为 n的人(即最右边的人)报完 n之后,轮到他左边的人(即编号为-1的人)报 n+1,然后编号为 n-2的人报 n+2,以此类推。当最左边的人再次报数之后,报数方向又变成从左到右,依次类推。 

为了防止游戏太无聊,报数时有一个特例:如果应该报的数包含数字 7或者是 7的倍数,他应当用拍手代替报数。下表是 n=4的报数情况(X表示拍手)。当编号为 3的人第 4次拍手的时候,他实际上数到了 35。 






给定 n,m和 k,你的任务是计算当编号为 m的人第 k次拍手时,他实际上数到了几。 



输入:


包含不超过 10组数据。每组数据占一行,包含三个整数 n,m和k(2<=n<=100, 1<=m<=n,k<=100)。输入结束标志为 n=m=k=0。 



输出:

对于每组数据,输出一行,即编号为 m的人第 k次拍手时,他实际上数到的那个整数。 













找规律即可。



#include<iostream>
using namespace std;
int main()
{
int n,m,k,i,j,s,x,y,m1,f;
while(cin>>n>>m>>k)
{
if(n==0&&m==0&&k==0)
break;
y=0;
s=1;
f=n-m;
m1=m;
while(y!=k)
{
x=m;
if(x%7==0)
{
++y;

}
else
{
while(x>0)
{
if((x%10)==7)
{
++y;
break;
}
x=x/10;
}
}
if(y==k)
break;
if(f==0&&m1!=1)
m+=2*(m1-1);
else if(m1==1)
{

m+=2*(n-m1);
}
else
{
if(s)
{

m+=2*(n-m1);
s=!s;

}
else
{
m+=2*(m1-1);
s=!s;

}
}

}
cout<<m<<endl;

}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: