zoukankan      html  css  js  c++  java
  • 猴子往下走

    问题描述
    有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,…,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关关闭,小猴子往左走,否则往右走,直到走到叶子结点。
    一些小猴子从结点1处开始往下跑,最后一个小猴儿会跑到哪里呢?
    输入
    输入二叉树叶子的深度D,和小猴子数目I,假设I不超过整棵树的叶子个数,D<=20。最终以 0 0 结尾。
    输出
    输出第I个小猴子所在的叶子编号。
    样例输入
    4 2
    3 4
    0 0
    样例输出
    12
    7

    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    int main()
    {
        int i, temp, a[1024]={0};
        int D,I;//二叉树叶子的深度D,小猴子数目I。
    	while( scanf("%d%d",&D,&I) && D && I )
        {
    		int j=pow(2,D-1);
    		memset(a,0,j*sizeof(int));
    		
    		//memset是计算机中C/C++语言函数。
    		//将s所指向的某一块内存中的后n个字节的内容全部设置为ch指定的ASCII值,
    		//第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,
    		//其返回值为s。
    		
    		while(I--)
    		{
    			//补充程序
    			for(i = 1; i <= j-1;)
    			{
    				temp = i;//temp上一步的i值
    				if( a[i] == 0 )
    					i = 2*i;
    				else i = 2*i+1;
    				
    				if(a[temp] == 0)
    					a[temp] = 1;
    				else 
    					a[temp] = 0;
    				
    			}
    
    			
    		}
            printf("%d
    ",i);
        }
        return 0;
    }
    
    
    
    
    
    

  • 相关阅读:
    poj 3666 Making the Grade
    poj 3186 Treats for the Cows (区间dp)
    hdu 1074 Doing Homework(状压)
    CodeForces 489C Given Length and Sum of Digits...
    CodeForces 163A Substring and Subsequence
    CodeForces 366C Dima and Salad
    CodeForces 180C Letter
    CodeForces
    hdu 2859 Phalanx
    socket接收大数据流
  • 原文地址:https://www.cnblogs.com/didiaodidiao/p/9387882.html
Copyright © 2011-2022 走看看