18 12
发新话题
打印

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

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

输入一个数 n, 要求写一个 f( n) 的函数, 计算 从 0 到 n 为止有几个 1 出现1 J3 P, f3 k- E+ C; O1 D
例如 f(11), 0 ~ 11 就有 4 个 1 出现, 于是就输出 4  X& ?' n, p0 o# b
1 N/ ~7 ~0 o& X, @
第二个求出所有 f(n ) == n , 和计算结果一致的数字, 例如我输入 f(1), 那么肯定只有 一个 1, 所以 f(n) == n
+ W6 E9 \; k5 ^1 V  X( [* U; v, E1 F" Y
8 v) ?5 b- o2 W, L& p
1. 不考虑负数情况: u/ ^* {$ q- k: |- c; a) m
2. 不考虑浮点情况0 Z# w: x/ a* m; U2 z& t9 z7 z
3. 不允许多个参数, 例如 f(n1, n2, ...)      
-----------------------------------------
http://www.darkspy.org/blog

TOP

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

TOP

可以递归来做。      

TOP

DS是不是要的这个结果?看看对不对,不对可能是我理解题目错了。这个是我用C++写的,只能是正整数,在BCB用了个界面来显示,如图:
) r9 W+ j& q$ c$ v* k: [: c  l9 ~- I
3 f( p0 F$ t4 g# N  M; a& a[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

看不明白?
9 _& c1 ?+ A0 p' Zn=1" Q- Q2 O# P: C7 }+ d+ o
f(1)=11 P4 g  u: g" ]. Z* h* V
1的个数 1
3 l0 U( V  H8 a! `1 o. _4 In=10; ~' e) t+ C% J7 f
f(1)=1 //只有一个数和结果一样
- W# J1 _# I# ?2 U9 e1的个数 21 `2 ?* R/ Q# o/ l& j3 N* G. ~
n=11
. F; \1 r7 t2 _2 |; m! f/ Q% mf(1)=1 //也只有一个数和结果一样
. ?3 P' z+ }2 G2 m& y# C1的个数 4) R" U  X' f- g8 ]5 u* `" |

5 y, X- Z- d; b) u下面同样.
; O# N& M  l6 C" A1 S( a& A8 i+ a9 q8 e# N. k
我只是把要判断的数换成字符判断,如果是1就count++,if(count==n) 时输出 f(n)==n来,然后再进行下一个数的判断。! w: p* `8 S9 `! U
% s" P% H7 ]8 ?
完了。      
一步一脚印。。。

TOP

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

TOP

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

TOP

第一个问题7 C2 q) O6 ]5 ]. ]% y0 w
可以先把n(可以表示成abcde这样的格式)拆成 e+d0+c00+b000+a0000这样的数之和
0 T  E" }4 @5 r6 c0 }# I再分别统计在个、十、百、千等位上(分别与10、100、1000、10000取余结果为e、d、c、b)出现的1的 个数之和。
7 |+ t* d( i: N( J% v+ f- z9 ^( I最后再统计最高位(a)为1--a时出现的1的个数。
9 x5 O9 E" _- J  b- B$ d再算整十、整百、整千等可以利用递归算法。      

TOP

 18 12
发新话题