hdu 1210 Eddy's 洗牌问题

找规律题,其实这题想通了也很简单,就是记录1的位置,第一次时,t都等于1,然后是t=2,t=4,t=8......知道t大于了n,即1的位置到了后半部分,此时,如果1是在n+1的位置,那么它的下一次就会变成顺序的,否则就继续从前往后找,直到1在n+1的位置为止。

举个例来说,n=6,

1 2 3 4 5 6 | 7 8 9 10 11 12     //t=1;

7 1 8 2 9 3 | 10 4 11 5 12 6     //t=2;

10 7 4 1 11 8 | 5 2 12 9 6 3    //t=4;

5 10 2 7 12 4 | 9 1 6 11 3 8    //t=8

此时,1的位置已经到了后半部分,

9 5 1 10 6 2 | 11 7 3 12 8 4    //t=3;

11 9 7 5 3 1 | 12 10 8 6 4 2    //t=6;

继续往下,上半部分规律很好找,就是2^(n-1);下半部分的比较麻烦,不过写出几个序列就很好找了,可以看以下代码。

代码:

复制代码
 1 #include<stdio.h>
2 #include<stdlib.h>
3 int main()
4 {
5 int n,t,k,s;
6 while(scanf("%d",&n)!=EOF)
7 {
8 t=1,s=0;
9 while(1)
10 {
11 if(t<=n)
12 {
13 s++;
14 t*=2;
15 }
16 if(t==n+1)
17 break;
18 if(t>n+1)
19 {
20 k=t%n;
21 if(k==0)
22 k=n;
23 t=(k-1)*2+1;
24 s++;
25 }
26 if(t==n+1)
27 break;
28 }
29 printf("%d\n",s+1);
30 }
31 return 0;
32 }
复制代码



posted @   Misty_1  阅读(422)  评论(0编辑  收藏  举报
编辑推荐:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
点击右上角即可分享
微信分享提示