有办法帮我算一下从1开始,逢4不要,5000之后是多少吗?

csu27 2005-02-26 05:33:48
有办法帮我算一下从1开始,逢4不要,5000之后是多少吗?
...全文
511 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
I_Love_CPP 2005-03-18
  • 打赏
  • 举报
回复
计算总和,减去含4的就可以了
一、
总和 = [(1+5000)/2 ] * 5000 ;

二、
含4的(为了避免重复计算,从大往小来数)
千位含4的总和 = 4999 + 4998 + ...4000 (是一个最简单的等差数列) = ....
百位含4(千位和百位均不含4)的总和 = 3499 + 3498 + ...1400+400
十位含4(千位和百位均不含4)的总和 = ...
个位.....
Leaf_jo 2005-03-16
  • 打赏
  • 举报
回复
arrowcy(长弓手) 你太搞笑了!你的结果里面就有4。方法没错,敲错了吧?
qufo 2005-03-14
  • 打赏
  • 举报
回复
十进制的 5000
转换成九进制是 6765
Smile_Tiger 2005-03-14
  • 打赏
  • 举报
回复
楼上明智,不做含义不清的题,不然就有可能白做了
zzwu 2005-03-10
  • 打赏
  • 举报
回复
含糊的地方:
1."逢4不要" 的意思是指:
(1) 末尾数是4都不要,如 4,14,24,34,..104,114,...都不要
(2) 除得尽4的数不要,也就是4,8,12,16,20,...不要
(3) 其他意思.

2.5000之后是多少:
(1) 是指{1,2,3,...5000}的集合中,除去"逢4"的哪些数之后的元素个数吗?
(2) 是指1*2*3*...*5000的乘积中,除去"逢4"的数之后的乘积吗?
(3) 其他意思.
zzwu 2005-03-10
  • 打赏
  • 举报
回复
题目看不懂!
macbolo 2005-03-08
  • 打赏
  • 举报
回复
whycadi(保护视力)
你的方法是对的,我仔细看了看,非常好
macbolo 2005-03-08
  • 打赏
  • 举报
回复
whycadi(保护视力)
你的方法不对,你只是去掉了以4结尾的数
JasonHeung 2005-03-01
  • 打赏
  • 举报
回复
whycadi(保护视力) ( ) 信誉:100 2005-2-26 23:52:33 得分: 0



int fun(int input){
int tmp,output=0,rate=1;
while(input){
tmp=input%9; //逐位转化
if(tmp>3) tmp++; //如果大于3,数值上加个1
output+=tmp*rate;
rate*=10;
input/=9;
}
return output;
}
用0-9十个数字计数的是10进制,用0,1两个数字计数的是二进制,那么用0123 56789九个数字计数的不就可以认为是九进制吗?那么我们用这个九进制数十进制的5000下是多少呢?这不就是个数制转化的问题了吗?相信数制转化没人不会做吧。程序我前面已经给过了。

好!这说明重要的不是写代码的能力,而是思考分析的能力!!!!


cuixiping 2005-03-01
  • 打赏
  • 举报
回复
上面还漏了一句:
str=str.replace(/4/g,"5");


:) 我爱脚本
cuixiping 2005-03-01
  • 打赏
  • 举报
回复
5000之后是多少吗? ---问的是第5000个还是第5001个呢?

5000转换为0-8表示的9进制是6765, 相当于0123 56789表示的9进制是7876.

所以应该是7876

<script language="JavaScript">
var str=(5000).toString(9); //"6765"
str=str.replace(/8/g,"9");
str=str.replace(/7/g,"8");
str=str.replace(/6/g,"7");
str=str.replace(/5/g,"6");
document.write(str); //"7876"
</script>


佩服 whycadi(保护视力) 哦 !
pcboyxhy 2005-02-28
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int n, s=8, num;
scanf("%d", &n);
for(num=n; num-s>0; s*=9)
num -= s;
s >>= 3;
while(s)
{
num = n/s; n%=s;
num += num<4?0:1;
printf("%d", num);
s/=9;
}
system("pause");
}
whycadi 2005-02-28
  • 打赏
  • 举报
回复
用0-9十个数字计数的是10进制,用0,1两个数字计数的是二进制,那么用0123 56789九个数字计数的不就可以认为是九进制吗?那么我们用这个九进制数十进制的5000下是多少呢?这不就是个数制转化的问题了吗?相信数制转化没人不会做吧。程序我前面已经给过了。
jivi 2005-02-28
  • 打赏
  • 举报
回复
这个用排列组合就能解出来了。先用数学方法表示出来。
根本不用用循环的啊
我们现在可以假设用四个空位来表示我们要往里面填的数字
□□□□ 这时我们可以先随便放一个4进入其中的一个框(不是第一个框)。那么在四个当中出现一个四的可能性就为(000-499)*3 共1500种可能性 那么放这个4进入第一框则有 (001-999)共998种可能性.
只有一个四的情况考虑完了。
再考虑有两个四的情况 也分两种情况
1.情况。没有四占1框的最共有(00-49)*3=147+1=148种.
2.情况.有占第一框的情况(00-99)*3=300种.
再考虑有三个四的情况 也分两种情况.
1.情况。没有四占1框的最共有4种.
2.情况.有占第一框的情况10*3=30种.
当然考虑完上述后还不能完全排除。还要两样依次考虑三个框情况下出现四的情况。
两个框情况下出现四的情况。一个框的情况。然后用上面的结果再减去这些情况。
最后用5000加上这个结果。最后得到的 就是 7876 嘻
虽然。但在时间复杂度上可以减少那么点点。嘻嘻啊
郁闷不了吧啊。。。。。。
BurningM 2005-02-28
  • 打赏
  • 举报
回复
中间可能算错了点,反正就是这样算的,正确结果是7874
你这个7874。。不满足条件
cuixiping 2005-02-27
  • 打赏
  • 举报
回复
7876 !

<script language="JavaScript">
var i=0,j=0;
while (i<5000){
if((++j).toString().indexOf("4")<0){
i++;
}
}
document.write(j); //7876
</script>
cuixiping 2005-02-27
  • 打赏
  • 举报
回复
佩服 arrowcy(长弓手) ! 他的方法好!
whycadi 2005-02-26
  • 打赏
  • 举报
回复
int fun(int input){
int tmp,output=0,rate=1;
while(input){
tmp=input%9; //逐位转化
if(tmp>3) tmp++; //如果大于3,数值上加个1
output+=tmp*rate;
rate*=10;
input/=9;
}
return output;
}
jp1984 2005-02-26
  • 打赏
  • 举报
回复
// love to flower
// m a t h e m a t i c s

#include <iostream>
#include <stdlib.h>
using namespace std;

const int N = 5000; // count the number
int test(int& n)
{
int p = n,tmp = 0,cnt = 1;
while(true)
{
while(p != 0)
{
tmp = p % 10;
p = p / 10;
if(tmp == 4)
break;
}
if(tmp != 4)
cnt++;
p = n + 1;
n++;
tmp = 0; // refresh...
if(cnt > N)
break;
}
return n;
}
int main(int argc, char *argv[])
{
int n = 1;
cout << test(n) << endl;
system("PAUSE");
return 0;
}
arrowcy 2005-02-26
  • 打赏
  • 举报
回复
这个好像有点意思,不过具体怎么做呢?
加载更多回复(3)

33,009

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧