zoukankan      html  css  js  c++  java
  • 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 }



  • 相关阅读:
    TCL环境检查
    POI之Excel文档增删改查
    wireshark自动化之tshark命令行
    selenium-webdriver
    ruby自动化之selenium webGUI
    TCL自动化之SSH交互式
    链表的操作
    参考网址
    RTC定时开机闹钟
    中断
  • 原文地址:https://www.cnblogs.com/misty1/p/2285249.html
Copyright © 2011-2022 走看看