用D语言解面试题6
来源:互联网 发布:如何在手机上开淘宝 编辑:程序博客网 时间:2024/05/21 22:53
看了 http://blog.csdn.net/chszs/article/details/1524679
感觉效率很低,现使用原创的数学公式新算法,用D语言把找下一个最大数的时间控制在0.3秒以内,(数值范围:1-200,000)
效率是穷举法的1000倍以上。
/*
有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。
比如f(13)=6,现在f(1)=1,问下一个最大的f(n)=n的n是什么?
*/
module fn;import std.stdio;import std.math;import std.datetime; int[int] aa;int[] Ac;void main(){ writeln("(D language) Please wait for some minutes,will found Next Fn(n) = n ,the n is:");int pos,n =1,count;StopWatch sw;sw.start();while(n <200000){ Ac =null;aa =null;pos = Fn(n); if(n == pos) {count++;writeln("n is: ",n, " Fn(n) is: ",pos); if(count >1) break;}n++;}sw.stop();writeln(" time :" , sw.peek().msecs," msecs");///1000.0writeln(n," stop");writeln("all ok!");}int Fn(int n){int i,y;int l;for(int x =n;x>=1;x/=10){y=x%10;aa[i] =y;Ac~=y;i++;} int m = cast(int)(Ac.length -1);int result,h;h =aa[m];if( n%gPow(m) == 0) return fnA(h,m);else return fnA(h,m)+fnB(m-1);}int fnA(int h,int m){if(h == 0) return 0;else if(h==1) {if(m == 0) return 1; else return m*gPow(m-1)+1;}else {if(m == 0) return 1; else return gPow(m)+h*m*gPow(m-1);}}int fnB(int m){ .......... // 代码略 return sum + fnB(m-1);}int gPow(int m){ return pow!(int,int)(10,m);}编译方法: ldc2 -m64 -O -release fn.d 或ldc2 -m64 -O -release -inline fn.d
/* test number ---------------穷举法,可用于测试上一个方法的结果-------------------------------------------*/int Fn_test(int n){int total;for(int i=0;i<=n;i++){total += Count(i);}return total;}int Count(int n){int num;for(int t = n;t >=1;t=t/10){if(t%10 == 1) num++;}return num;}
0 0
- 用D语言解面试题6
- 用D语言解面试题1
- 用D语言解面试题2
- 用D语言解面试题3
- 用D语言解面试题4
- 用D语言解面试题5
- 【C语言】【面试题】【笔试题】对于char 类型用%u与%d输出结果解析
- Rust语言解面试题1
- Go 语言解面试题1
- 3D程序员面试题
- Unity 3D 面试题
- 百度面试题d(n)
- Unity 3D面试题
- C语言面试题
- C语言面试题
- C语言面试题
- C语言面试题
- c语言面试题
- 用mysql workbench生成ER图
- 开门见iOS(2)
- POJ 3061 Subsequence(尺取法)
- [最短路径、BFS] HDU 1548 - A strange lift
- 码农生涯杂记_2
- 用D语言解面试题6
- 带分数 100 可以表示为带分数的形式:100 = 3 + 69258 / 714
- LINUX下select设置超时
- HTTP(S)网站目录暴破测试工具 – Dirs3arch v0.3.0
- Ultra-QuickSort(离散化+树状数组求逆序数)
- 2015年2月11日
- 通用的POI导入Excel解决方案
- 代理实现界面跳转传值
- 鸽巢原理:hdu 1205 吃糖果+poj 2356 Find a multiple+poj 3370 Halloween treats