18 12
发新话题
打印

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

[QUOTE=ljj]看来我还是没弄懂题目,能不能再详细点?[/QUOTE]
; g; n  ^4 T' s/ J5 B; ^5 }( R) }
$ `2 r! S& W6 c8 U: `. j7 ~输入一个数 n, 要求写一个 f( n) 的函数, 计算 从 0 到 n 为止有几个 1 出现,函数返回出现 1 的数字的值。
& [* \$ l% z( ^5 \) ?' l例如 f(11), 0 ~ 11 就有 4 个 1 出现, 于是就返回 4
3 C% I7 U! v! r! B9 L- y
$ ~, b! c/ x, X' `第二个是在第一道题目的算法基础上,求出所有 f(n ) == n , 和计算结果一致的数字, 例如我输入 f(1), 那么肯定只有 一个 1, 所以 f(n) 返回的是 1, 而n 也是 1, 那么 f(n)肯定是 == n 了。! D( F, C  q2 Z5 q! Z* J

* \6 I5 h; f2 l# d# C  c9 [9 Q* [! g" S/ M
1. 不考虑负数情况
* ^7 D. _6 ?6 ]- `& J# G; R) `2. 不考虑浮点情况8 W6 g/ y( t% {$ `& u2 e2 ?
3. 不允许多个参数, 例如 f(n1, n2, ...)      
-----------------------------------------
http://www.darkspy.org/blog

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

TOP

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

TOP

[QUOTE=DarkSpy]输入一个数 n, 要求写一个 f( n) 的函数, 计算 从 0 到 n 为止有几个 1 出现,函数返回出现 1 的数字的值。8 g, M" O2 R0 O7 ~; A3 m
例如 f(11), 0 ~ 11 就有 4 个 1 出现, 于是就返回 4[/QUOTE]
' F) y8 Z0 f- b! A0 H, o7 X1 K& a1 k% ^1 ~' ?% u3 |9 w9 k& a
我觉得我的结果没有错啊。- c. _- A  A. M! \% `( l' ?, Q% c2 _6 b
( P2 M" [+ a% S! U: y/ l8 u

2 N" J) @: W/ G1 ?7 Gf(n): 输出 1 的个数:
- W2 L' U2 c0 s7 r# g& D* }f(1)  输出 1;f(10) 输出 2 ;f(11) 输出 4 ;f(11110)输出 5555 ;! |+ D/ M7 |8 B  B) k" u
f(199981) 输出 199981 ;  f(200001) 输出 200001+ ?! o9 P, }% \0 S) `# d/ K( e" U

5 l2 D3 |+ I& P' f3 r[QUOTE=DarkSpy]第二个是在第一道题目的算法基础上,求出所有 f(n ) == n , 和计算结果一致的数字, 例如我输入 f(1), 那么肯定只有 一个 1, 所以 f(n) 返回的是 1, 而n 也是 1, 那么 f(n)肯定是 == n 了。[/QUOTE]( K  {, B, |0 L4 U

2 g4 C" c% P0 S2 C$ I+ b5 V/ u6 d: Bf(1)  输出 1:这时 f(1)=1;   9 ?8 L- n/ L5 l, }4 _6 v
f(199981) 输出 199981 ; 这里有两个结果(1 的个数 )和 输入的数字 相等f(1)==1;   f(199981)==199981    (1 的个数和输入的数字相等)! Y; ?! a: l* v
同样:
1 h% f9 M' x# _) G 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 的个数和输入的数字相等)6 Z7 x: J5 s+ U  a
) V# `" G) ?: a( `  }: h
由此我认为在 n<199981 中,只有一个结果和输入的数(n)相等,就是 n=1 的时候。      
一步一脚印。。。

TOP

嗯,结果是对的,你的截图我没看清楚.0 i  d+ z( q+ c5 M
下面你可以给出你的算法.
, J, I) H8 V/ m我女朋友也是程序员,她的算法速度巨快,令人感慨.:-D      
-----------------------------------------
http://www.darkspy.org/blog

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

TOP

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

TOP

其实这道题目和上次的比,如果需要优化的话, 两道都有稍许难度,如果普通做的话, 是无所谓难度的,5 G: I1 P; r. K
两道题目都可以用暴力法做.
7 T# @$ J& I5 v/ O! Z- E# |第一道其实是类似背包问题,应该是NP的,      
-----------------------------------------
http://www.darkspy.org/blog

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

TOP

[QUOTE=DarkSpy]嗯,结果是对的,你的截图我没看清楚.1 G# n; X/ @( ]0 _* |) q1 T# g
下面你可以给出你的算法.
5 l9 ?# C% f4 b我女朋友也是程序员,她的算法速度巨快,令人感慨.:-D[/QUOTE]
+ f5 [+ Q4 k' _. t& u2 F7 O3 k  O$ N
没什么算法可言,我只是把要判断的数换成字符判断,如果是1就count++,if(count==n) 时输出 f(n)==n来,然后再进行下一个数的判断。3 [4 L+ v" Z  z5 H" t

+ i( B9 |$ W- R( b$ o- O. i完了。. Z7 a3 ]6 [0 l4 V
' \+ O3 [6 S  T1 D( v: J. P+ o
8 F" f. y  T* s  q! n5 ]: r
可能运行起来比较慢,我输入999999 时,在 CPU:C1.7 内存:512M 大约用了15秒。       
一步一脚印。。。

TOP

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

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

TOP

 18 12
发新话题