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 }
分类:
Basic
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!