谁是赌神

谁是赌神

Time Limit: 1 s   |   Memory Limit: 64 MB

Difficulty: 1

Description

ACM队四位大神坐在一起玩纸牌,要决出谁才是真正的赌神之名,他们玩得游戏规则呢
很简单,就是有n张纸牌从上到下按顺序依次是1,2,3,4,5...n,每次操作呢就是把最上面的一张牌
扔掉然后再把现在在最上面的那一张拿走放在最下面。比如原始序列是1,2,3,4,5...n一次操作后
就变成了3,4,...n,2,他们的规则是随便给出一个数n,谁能快速答出这n张牌反复经过上述操作后
最后剩下的纸牌的编号是多少就算谁赢。各大神们都是不愿轻易服输之辈,他们冥思苦想,最后
终于lt大神和ctx大神在最短的时间内解决了这个问题,但是呢,赌神只有一个,这怎么办呢,没办
法,经过协商,lt大神获得赌圣之名,ctx大神获得赌仙之名,当然这是后话。现在的问题是,如果
你也参加了赌神争夺战,你能不能也夺得赌神之名呢?看你的了!

Acm队的大神说过,AC就像爱情,来的那么突然,让你惊讶,并且欣喜若狂。
尽情的来吧~~~~!!!

Input

每一行输入一个整数,代表纸牌的数量n(1<=n<=500000),输入整数0代表输入结束
数据保证数据的组数不会超过500000组

Output

输出:
每组输入数据的输出占一行,输出只有一个数字,代表最后剩下的牌的编号

Sample Input

1

Sample Output

1

Source

1

Hint

测试数据好坑

测试数据真的好坑

这一题是一个规律题,开始用数组模拟做的,果断超时,之后多写了几组,发现了规律,接下来是规律,1-1,2-2,3-2,4-4,5-2,6-4,7-6,8-8...16-16..32-32懂了吧,,,,循环的...

#include <stdio.h>
#include <math.h>
int main()
{
	int n, i, result;
	scanf("%d", &n);
	while(n != 0)
	{
		if(n == 1)
		{
			printf("1\n");
		}
		else if(n == 2)
		{
			printf("2\n");
		}
		else if(n == 3)
		{
			printf("2\n");
		}
		else if(n == 4)
		{
			printf("4\n");
		}
		else
		{
			for(i = 1; ; i++)
			{
				result = (int)pow(2, i);//printf("%d", result);
				if(result >= n)
				{
					break ;
				}
			}
			int sum = result ;
		//	for(i = sum; i > n; i--)
			//{
				sum = sum - 2 * (sum - n);//竟然改成这样直接计算就不超时了,我简直是醉了
			//}
			printf("%d\n", sum);
		}
		scanf("%d", &n);
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值