谁是赌神

来源:互联网 发布:国联证券软件下载 编辑:程序博客网 时间:2024/06/10 16:52

谁是赌神

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
原创粉丝点击