18 12
发新话题
打印

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

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

输入一个数 n, 要求写一个 f( n) 的函数, 计算 从 0 到 n 为止有几个 1 出现
; D" M1 C6 |' s9 |( P/ [( Y例如 f(11), 0 ~ 11 就有 4 个 1 出现, 于是就输出 4
) @+ b1 H- l$ E5 H
! B5 \0 c6 ?& d/ u第二个求出所有 f(n ) == n , 和计算结果一致的数字, 例如我输入 f(1), 那么肯定只有 一个 1, 所以 f(n) == n8 L0 X* M' A; ?) D

* A2 y/ v- l) `$ m2 o
# |4 Z* W* w! g- a6 n9 V) Q# L1. 不考虑负数情况
# ^. B$ v' _6 S& L2. 不考虑浮点情况
: C  @& }% X8 `2 a3. 不允许多个参数, 例如 f(n1, n2, ...)      
-----------------------------------------
http://www.darkspy.org/blog

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

TOP

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

TOP

可以递归来做。      

TOP

DS是不是要的这个结果?看看对不对,不对可能是我理解题目错了。这个是我用C++写的,只能是正整数,在BCB用了个界面来显示,如图:  ?9 H5 @6 [, z/ V7 z+ H0 D
! x7 i. v9 L+ e- |* F  E: M( S
[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

看不明白?
: D2 O! x- t4 k9 M- Hn=1
  I) o+ l- ?0 s- J; Af(1)=1$ ?% ^2 z5 t1 |/ y0 H$ ]- A
1的个数 1
' s. y  p0 t) v( ]n=10
7 {$ P: t3 T* g/ c4 J5 jf(1)=1 //只有一个数和结果一样
7 ?& [) K4 G* b1的个数 2
# E0 J2 Z1 u* o* E( z8 Jn=11
6 K. T& G; A6 c; j2 vf(1)=1 //也只有一个数和结果一样
( T$ @- V5 C8 X; l9 y1的个数 4
  l# j: ]6 T) `6 Y1 J
( Z8 A" {' a3 \4 W% j; g下面同样.: g1 O4 G3 V6 r% P' g. x
* a8 W- ~4 _3 p
我只是把要判断的数换成字符判断,如果是1就count++,if(count==n) 时输出 f(n)==n来,然后再进行下一个数的判断。. Y/ g9 c6 O( I% \& o

# B  b, n, N$ o& J. M完了。      
一步一脚印。。。

TOP

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

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

TOP

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

TOP

第一个问题+ n8 C% W9 n  i$ J) P/ a
可以先把n(可以表示成abcde这样的格式)拆成 e+d0+c00+b000+a0000这样的数之和$ o6 m' X8 k$ Q. G, I( V8 Q8 y
再分别统计在个、十、百、千等位上(分别与10、100、1000、10000取余结果为e、d、c、b)出现的1的 个数之和。/ ?. }! x  ]: Q0 ?: H* D
最后再统计最高位(a)为1--a时出现的1的个数。
, v$ `# [! p4 A" f# t4 `6 f再算整十、整百、整千等可以利用递归算法。      

TOP

 18 12
发新话题