首页 > 代码库 > 第六章例题

第六章例题

 

  1 #include <cstdio>
  2 #include <cstring>
  3 
  4 using namespace std;
  5 
  6 int btr[1<<20];
  7 
  8 
  9 int main()
 10 {
 11     int D,I;
 12 
 13     while(scanf("%d%d",&D,&I)==2)
 14     {
 15         memset(btr,0,sizeof(btr));
 16 
 17         int k;
 18 
 19         for(int i=1;i<=I;i++)
 20         {
 21             k=1;
 22 
 23             for(int j=1;j<=D-1;j++)
 24             {
 25                 if(btr[k]==0)
 26                 {
 27                     btr[k]=!btr[k];
 28                     k=k*2;
 29                 }
 30                 else
 31                 {
 32                     btr[k]=!btr[k];
 33                     k=k*2+1;
 34                 }
 35             }
 36         }
 37 
 38         printf("%d\n", k);
 39     }
 40 }
 41 
 42 /*
 43 int main()
 44 {
 45     int D,I;
 46 
 47     while(scanf("%d%d",&D,&I)==2)
 48     {
 49         int k=1;
 50 
 51         for(int i=1;i<=D-1;i++)
 52         {
 53 
 54         
 55             if(I%2)
 56             {
 57                 k=k*2;
 58                 I=(I+1)/2;
 59             }
 60             else
 61             {
 62                 k=k*2+1;
 63                 I/=2;
 64             }        
 65         }
 66 
 67         printf("%d\n",k);
 68     }
 69 }
 70 
 71 */
 72 
 73 /*
 74 
 75 int main()
 76 {
 77     int D,I;
 78 
 79     while(scanf("%d%d",&D,&I)==2)
 80     {
 81         int k=1;
 82 
 83         for(int i=1;i<=D-1;i++)
 84         {
 85 
 86                                      
 87             if(I==1)                 //当题目是第一次左走其他时候又走时代码是这样
 88                 k=k*2;
 89             else
 90             {
 91                 k=k*2+1;
 92                 I=I-1;
 93             }
 94             
 95         }
 96 
 97         printf("%d\n",k);
 98     }
 99 }
100 
101 */

 

第六章例题