作者linjrming (风之信使)
站内NTUE-CS99
标题[ACM ][ 100] The 3n + 1 problem
时间Mon Mar 26 22:57:46 2012
今天面试的被问到的题目
除了暴力解以外,有没有更快的解法
回家把那时候嘴炮的东西实作一下,大概只花了我08年用暴力解的20%时间
http://acm.uva.es/p/v1/100.html
#include <iostream>
#include <stdio.h>
using namespace std;
int output [1000000]={1,1}; //宣告一个DP用的阵列,题目说最大是1M
int f(int n)
{
if(n<1000000) //超过1M就放弃DP,反正很少用到
{
if(output[n]!=0) //递回解(DP部分)
return output[n];
else if(n%2)
output[n]=1+f(3*n+1);
else
output[n]=1+f(n/2);
return output[n];
}
else
{
if(n%2) //递回解(不用DP部分)
return 1+f(3*n+1);
else
return 1+f(n/2);
}
}
int main()
{
int a,b; //input两个数字丢给a,b
while(cin >> a >> b)
{
int e,g,max=0;
if(a>b) e=b, g=a; //确保e>g
else e=a ,g=b;
for(int j=e;j<=g;j++) //比大小
if(f(j)>max)
max=output[j];
cout << a << " " << b << " " << max << endl; //Output
}
return 0;
}
感觉面试考得比研究所还简单...
谁能教我帅气的命名变数,不打注解过1小时回来就看不懂了
--
◥◣ ∞ ◢◤
◢◣◤◢◣ 萃まる梦、幻、そして百鬼夜行
﹒ ▕● <◥▍ 伊吹 萃香
● ▕▄▄▄ ▎§
● §∕ ︽ ﹨▏▲ 伊吹の西瓜
● ◢▄▄◥ Suika Ibuki ψgbwind
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.34.74.139
1F:推 jyc180:帅哥 03/26 23:20
2F:推 Disintegrate:竟然还有人会来这QQ 03/26 23:48
3F:推 hsiang915:而且楼上还发现了XD 03/27 08:48
4F:→ hsiang915:驼峰式命名法XD 03/27 08:49
5F:推 Disintegrate:boolean isSidIdiot = true; 03/31 05:33