起名问题
   育儿问题
   家庭教育
   起名问题
   宝宝疾病

   相关栏目
 朋友生娃子气啥名好呢各路...
 帮我根据中文名起个英文名...
 “诺言”好听。还是“慌言...
 请帮忙:如何给我未出生的...
 急!小儿08年4月5日10时58...
 请高人给李姓宝宝取名~~~~...
 新蕾那一期里有一篇文章叫...
 姓罗的鼠宝宝,取什么名字...
 怎么根据出生时间算生辰八...
 求大师帮忙宝宝测算下名字...
 请大师帮我宝宝起个好名字...
 我的名字是”雨莹”,请根...

 您现在的位置: 休闲宝贝网 >> 育儿FAQ >> 起名问题 >> 

起名问题 求敲七(题的名字)算法(C++)
  人气: 【字体:
  发布时间:2006-04-12 12:42:20

  >>>>>>>>提问

题目描述:
大家都爱敲七,我也来敲一回。
如果一个数能被7整除,或者它含有数字7,那么说这个数字与7有关。现在给出整数N(1<=N<=300),请你求出从0到10^N-1有多少个数与7有关。当然,0是7的倍数,所以0也算与7有关的数。
输入:
本题有多组数据,每组一行,为一个整数N。

输出:
每行一个整数,为从0到10^N-1的与7有关的数的个数。

由于数据太大如果直接搜估计搜个100年就能出结果。。。哪位高人有好办法解决。详细说明算法有程序当然更好(C++或者Pascal)
时间限制是1S- -

休 闲 宝 贝 网



>>>>>>>>休闲宝贝网回答:

不会。。。。
我只会这样算,
比如说n = 3;
即0 到999
先找7的倍数
999 / 7 得到142
带7的数
由于是 n=3,所以最高是三位
则有三种情况:个位是7,十位是7,还有百位是7(要求只能有一个7出现在数中)
个位是7,则前面还有两位:百位,十位
则选择方案有9*9种(当百位为0则就是一个二位数,百位十位都为0,就是一个一位数,就可以把个,十,百三种情况都包括了,哦耶!!当然,这时百位和十位不能有任何一个为7)
同样的,十位是7的话,百位和个位有9*9种选择。
百位是7的时候也是一样。。。
所以直接就可以算出来是 n * 9*9……*9(n-1个9)。
再说有两位同时为7的,这两位是百,十,个位的有序组合,有三种情况,百+十,十+个,百+个
这个时候有3*9种情况。
……当多于三位,以此类推。不会太复杂。
最后是三个都位7,明显只有一个呗。
最后还有一个很恐怖的问题。。。。当一个数又是7的倍数,又包含7。。。这个。。。。努力思考中。。
----------------------------------------------------------


想了半天之后,我突然发现一个很严重的问题,10^300次方~~~这东西完全没法没法用内置类型来表达嘛~~~
那我的算法,完全就不可行了。。。除非你新建一个类,能表达这么大的数,其行为又和内置类型相似~~
想想。。。是不是应该用string来表达这些数呢~~~
然后加一个容器~~~
先将能被7整除的数找出来,再在这些string里面,利用find方法找7,找到就排除。。。。
这样做的话,好像时间复杂度又没怎么减少啊。。。
郁闷了。。。。
反正我就能想到这么多了。。。你自己看着吧。。

≡ 查看、发表评论 ≡