小球下落
来源:互联网 发布:淘宝店管理软件 编辑:程序博客网 时间:2024/04/27 04:20
题目:
#include<stdio.h>#include<time.h>#include<string.h>#define MAX 20int s[1<<MAX];int main(){int D,I,k,n,i;double s1,s2;while(scanf("%d%d",&D,&I) != EOF){s1=clock();memset(s,0,sizeof(s));n=(1<<D)-1;for(i=0; i< I; i++){k=1;for(;;){s[k]= !s[k];k= s[k] ? k*2 : k*2+1;if(k>n)break;}}s2=clock();printf("%d\tEscape Time:%lf s\n",k/2,(s2-s1)/CLOCKS_PER_SEC);}return 0;}输入测试数据
4 2
3 4
10 1
2 2
8 128
16 12345
18 62144
20 948000
输出:
这个程序运算量太大,一定会超时的..................
第二个运算要比第一个快很多,这是逆推编号I小球的路径,因为每个小球都会落到根结点上,前两个小球必然一个在左子树,一个往右子树。一般地,只要看小球编号,就知道它是第几个小球产生的。
#include<stdio.h>#include<time.h>#include<stdlib.h>int main(){int D, I, k, i;double s1,s2;while(scanf("%d%d",&D, &I) != EOF){s1=clock();k=1;for(i=0; i< D-1; i++)if(I%2){k=k*2;I = (I+1)/2;}else{k=k*2+1;I /= 2;}s2=clock();printf("%d\tEscape Time:%lf m\n",k, (s2-s1)/CLOCKS_PER_SEC);}return 0;}
输出效果:
0 0
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- 小球下落
- [算法]小球自由下落
- 小球下落问题
- 【小球下落 P99】
- 黑马程序员------第11天笔记(泛型)
- 黑马程序员_7k面试题之银行业务调度系统
- 例子
- js 异常处理
- 【Hibernate学习笔记】映射继承关系
- 小球下落
- POJ 2653 判断线段相交
- 黑马程序员------第12天笔记(Map接口)
- cocos2d-x-2.2的SimpleAudioEngine::sharedEngine()->playEffect()程序中断的bug
- Xcode 常用快捷键及代码自动排版
- 微信开发 Weixin JS接口 网页获取用户网络状态
- 图书管理系统中标签控件的使用示例
- ubuntu 12.04 LTS 版本
- Struts2 国际化支持