18 12
发新话题
打印

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

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

输入一个数 n, 要求写一个 f( n) 的函数, 计算 从 0 到 n 为止有几个 1 出现) g) _# Y5 V2 o/ P+ H8 b* C6 }
例如 f(11), 0 ~ 11 就有 4 个 1 出现, 于是就输出 4
, d' |6 z. W; G# J
5 r  l2 V$ ?3 }第二个求出所有 f(n ) == n , 和计算结果一致的数字, 例如我输入 f(1), 那么肯定只有 一个 1, 所以 f(n) == n
* N/ x9 s4 ?: T9 @9 `5 S. g6 g9 N* D- h) w
0 V+ r" Q4 K3 _" W# w$ Q, `
1. 不考虑负数情况
  y5 V( w- |; w6 {# R  G9 m  ~6 Y2. 不考虑浮点情况
; z* Q8 v1 m1 |- z0 J0 v% w3. 不允许多个参数, 例如 f(n1, n2, ...)      
-----------------------------------------
http://www.darkspy.org/blog

TOP

只有一个1的情况比较好判断,超过一个的话还想不出有什么好的算法……      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

可以递归来做。      

TOP

DS是不是要的这个结果?看看对不对,不对可能是我理解题目错了。这个是我用C++写的,只能是正整数,在BCB用了个界面来显示,如图:
* g5 \5 E5 i3 C" _9 i" x: U. M2 \/ {6 P7 W  g* x% w1 R; d: @
[IMG]http://www5.freep.cn/Photo.aspx?url=PhotoNew_www5/061010/17/0610101744078131.JPG[/IMG]      
一步一脚印。。。

TOP

想法说来看看呢?看图能看明白?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

4 楼的我不太看的明白,但是结果应该是不正确的。      
-----------------------------------------
http://www.darkspy.org/blog

TOP

看不明白?% d+ V  P9 n1 U/ \9 T
n=14 f# a1 N0 G+ ~
f(1)=1
: X0 h1 {5 N4 r0 k& ^5 G& Y8 Q1的个数 14 H% k$ I  y: O/ D4 j% [
n=10
2 z4 y% C9 \& ]) |+ R6 g; h( df(1)=1 //只有一个数和结果一样
0 Y6 w) e- }; L/ U! g1的个数 2
% t) |( p9 v' L% I, A& n  On=11
4 u1 b; q/ ?2 E0 Y- Z; n" y) hf(1)=1 //也只有一个数和结果一样3 Z  X: r% `4 G7 h# c! T$ K# c9 a
1的个数 4
! x" j1 v2 \* {7 a$ p& o
2 X1 J# H/ ~+ ^) N: T下面同样.; \9 \9 x) y5 W. x2 t) ?
. J3 J6 c% n% h3 P
我只是把要判断的数换成字符判断,如果是1就count++,if(count==n) 时输出 f(n)==n来,然后再进行下一个数的判断。" L5 j$ X& U8 A, l

% a* m/ h/ q+ `- r6 F" z% q% f' \完了。      
一步一脚印。。。

TOP

提示一下, 这道题目应该将算法拆开看,递归是一个办法,但是算法拆开能提高很多的速度。当然暴力法也是可以,但是速度就不行了。      
-----------------------------------------
http://www.darkspy.org/blog

TOP

看来我还是没弄懂题目,能不能再详细点?      
一步一脚印。。。

TOP

第一个问题) d9 d. C0 j; i' i) ~& m% q
可以先把n(可以表示成abcde这样的格式)拆成 e+d0+c00+b000+a0000这样的数之和
. d) ?% p3 o# r% i再分别统计在个、十、百、千等位上(分别与10、100、1000、10000取余结果为e、d、c、b)出现的1的 个数之和。
' @' q( K+ h) T9 ^, y  s0 k最后再统计最高位(a)为1--a时出现的1的个数。
4 P% b+ ~& u7 \再算整十、整百、整千等可以利用递归算法。      

TOP

 18 12
发新话题