18 12
发新话题
打印

给大家出道题目之二,有趣的小题目

[QUOTE=ljj]看来我还是没弄懂题目,能不能再详细点?[/QUOTE]
9 P) d5 X$ \; p5 d2 Y  \# o& [0 B9 y) c3 X+ ]% q  Q7 W& W6 k( A
输入一个数 n, 要求写一个 f( n) 的函数, 计算 从 0 到 n 为止有几个 1 出现,函数返回出现 1 的数字的值。
8 d7 h  i: R- }9 @: {2 l例如 f(11), 0 ~ 11 就有 4 个 1 出现, 于是就返回 4: q0 f, \9 `1 `1 B0 w) ?" U* {

+ ~6 I9 `& Q+ K/ `0 ]" a+ w1 M第二个是在第一道题目的算法基础上,求出所有 f(n ) == n , 和计算结果一致的数字, 例如我输入 f(1), 那么肯定只有 一个 1, 所以 f(n) 返回的是 1, 而n 也是 1, 那么 f(n)肯定是 == n 了。
7 M$ Q+ g( h" P) C+ i
0 a' O5 E) D- l  |9 f: k9 X0 O- _
1. 不考虑负数情况
/ y9 ^, g9 K# M8 P& |2. 不考虑浮点情况" }8 {% u2 _$ _' o' I8 n
3. 不允许多个参数, 例如 f(n1, n2, ...)      
-----------------------------------------
http://www.darkspy.org/blog

自大的人把宗教当迷信,无知的人把迷信当宗教

TOP

应该比较简单吧。      
让linux走进每个人的电脑,linux忠实的朋友

TOP

[QUOTE=DarkSpy]输入一个数 n, 要求写一个 f( n) 的函数, 计算 从 0 到 n 为止有几个 1 出现,函数返回出现 1 的数字的值。
5 y* U9 B3 g2 ~7 I0 i0 t/ n8 P例如 f(11), 0 ~ 11 就有 4 个 1 出现, 于是就返回 4[/QUOTE]3 P8 M# I6 _: Y# c& B4 ^

) l+ N7 H' G: k8 A# L我觉得我的结果没有错啊。
1 y2 V$ ?# z# B3 K! P& H1 c1 @9 N

9 ^5 n6 G8 ^: B9 g7 Nf(n): 输出 1 的个数:
) j! }, p$ e3 Sf(1)  输出 1;f(10) 输出 2 ;f(11) 输出 4 ;f(11110)输出 5555 ;4 ?  M" j. @% F" M0 s
f(199981) 输出 199981 ;  f(200001) 输出 200001* Z0 Q3 I% X7 ]/ q

- y, Q7 L# N( r2 O3 t+ q[QUOTE=DarkSpy]第二个是在第一道题目的算法基础上,求出所有 f(n ) == n , 和计算结果一致的数字, 例如我输入 f(1), 那么肯定只有 一个 1, 所以 f(n) 返回的是 1, 而n 也是 1, 那么 f(n)肯定是 == n 了。[/QUOTE]) q1 N# X9 }/ o" a2 `
+ |% B# a* O5 J8 b( T) q8 ?: w
f(1)  输出 1:这时 f(1)=1;   
9 o0 B+ r" C+ s) Y5 R6 ~$ r1 f f(199981) 输出 199981 ; 这里有两个结果(1 的个数 )和 输入的数字 相等f(1)==1;   f(199981)==199981    (1 的个数和输入的数字相等)
! q: n  t! b8 `6 p+ p同样:
# r$ ^9 A8 i* ~0 k: N$ ^: ^! K9 ~ f(200001) 输出 200001 ;这里有十二个结果(1 的个数 )和输入的数字相等 f(1)==1;   f(199981)==199981 ;   f(199982)==199982 ;   f(199983)==199983 ;   f(199984)==199984 ;   f(199985)==199985 ;   f(199986)==199986 ;   f(199987)==199987 ;   f(199988)==199988 ;     f(199989)==199989 ;......f(200001)==200001 (1 的个数和输入的数字相等)
+ T% v( B; T/ @  t9 F
4 x1 |( {# z# C$ f* A由此我认为在 n<199981 中,只有一个结果和输入的数(n)相等,就是 n=1 的时候。      
一步一脚印。。。

TOP

嗯,结果是对的,你的截图我没看清楚.# |( i& L6 ~: Q4 X% T% p$ B
下面你可以给出你的算法.5 d6 z0 w: J4 L; [$ ^, J; w( A3 P" L$ [
我女朋友也是程序员,她的算法速度巨快,令人感慨.:-D      
-----------------------------------------
http://www.darkspy.org/blog

自大的人把宗教当迷信,无知的人把迷信当宗教

TOP

[QUOTE=DarkSpy]我女朋友也是程序员,她的算法速度巨快,令人感慨.:-D[/QUOTE]
$ E8 M: U  [+ m( J0 u4 E: I% m那可要仰视一下了,不过DarkSpy上次的给答案了吗?不厚道呦 :w      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

其实这道题目和上次的比,如果需要优化的话, 两道都有稍许难度,如果普通做的话, 是无所谓难度的,7 T- {* {! ^) G; k
两道题目都可以用暴力法做.
+ f2 V" o' E: @; w第一道其实是类似背包问题,应该是NP的,      
-----------------------------------------
http://www.darkspy.org/blog

自大的人把宗教当迷信,无知的人把迷信当宗教

TOP

[QUOTE=DarkSpy]嗯,结果是对的,你的截图我没看清楚.
" W& Q9 i9 F1 Y# Q/ W下面你可以给出你的算法.  p5 M4 ]- s$ j( k" g. K3 S
我女朋友也是程序员,她的算法速度巨快,令人感慨.:-D[/QUOTE]
6 m- C& z- d; F  N
) a! f# h/ L/ _6 V4 b 没什么算法可言,我只是把要判断的数换成字符判断,如果是1就count++,if(count==n) 时输出 f(n)==n来,然后再进行下一个数的判断。
( I0 g$ O" m% R( v) v# B9 X% E8 g3 X3 L3 ~& G, e, S
完了。
( P# a6 ^* h# g7 J. o" d* [. Y) t% A$ G* E: A

$ l# C9 B4 l4 H& M4 g可能运行起来比较慢,我输入999999 时,在 CPU:C1.7 内存:512M 大约用了15秒。       
一步一脚印。。。

TOP

那你应该用的暴力法了      
-----------------------------------------
http://www.darkspy.org/blog

自大的人把宗教当迷信,无知的人把迷信当宗教

TOP

 18 12
发新话题