“渐升数”(如34678)是指每个数字比其左边的数字大的正整数,已知共有126个五位渐升数,
2个回答
展开全部
你说倒推,好吧,
(1)最大的渐升数是56789,以5开头的只有1个
(2)以4开头的渐升数在后四位数有5、6、7、8、9,五个数字可供选择,即从五个数字中挑出4个数字的组合,每个组合只有一种排列方式,有C(4:5)=5个
(3)以3开头的渐升数在后四位数有4、5、6、7、8、9,六个数字可供选择,即从六个数字中挑出4个数字的组合,有C(4:6)=15个
以上有21个数字,34567是第106个,所以再往前数5个即可。
(4)以2开头最大的是万位为6,只有26789一个,
其次为万位为5,后三位有6、7、8、9四个数字选择,C(4:3)=4个
以上总共有26个了。
所以第100个为,十万位为2,万位为4的最大数,即24789
换个方法,
五位的渐升数是9选5的组合数,C(9:5)=126,
去除十万位1的,8选5的组合数,C(8:5)=56,
去除十万位1,2的,7选5的组合数,C(7:5)=21,
所以必定是十万位为2的。
再接上题(4)
(1)最大的渐升数是56789,以5开头的只有1个
(2)以4开头的渐升数在后四位数有5、6、7、8、9,五个数字可供选择,即从五个数字中挑出4个数字的组合,每个组合只有一种排列方式,有C(4:5)=5个
(3)以3开头的渐升数在后四位数有4、5、6、7、8、9,六个数字可供选择,即从六个数字中挑出4个数字的组合,有C(4:6)=15个
以上有21个数字,34567是第106个,所以再往前数5个即可。
(4)以2开头最大的是万位为6,只有26789一个,
其次为万位为5,后三位有6、7、8、9四个数字选择,C(4:3)=4个
以上总共有26个了。
所以第100个为,十万位为2,万位为4的最大数,即24789
换个方法,
五位的渐升数是9选5的组合数,C(9:5)=126,
去除十万位1的,8选5的组合数,C(8:5)=56,
去除十万位1,2的,7选5的组合数,C(7:5)=21,
所以必定是十万位为2的。
再接上题(4)
展开全部
可以用程序的方法实现:程序如下(用的是C语言编写的)
#include <stdio.h>
void main()
{
long int num,j; //判断num是否是渐升数
int i,k,flag,count=0; //flag哨兵值,count是计数器
for(num=12345;num<=56789 && count<100;num++)
{
flag=1;
j=num;
do
{
i=j%10; // 取个位数
j=j/10; //除以十,以便取其十位
k=j%10; //取十位数
if(i<=k) //符合条件
flag=0;
}while(j && flag);
if(flag==1) //满足所有条件,将其输出,并计数器自增
{
count++;
printf("%d ",num);
}
}
}
运行结果:前一百个,第一百个是:24789
12345 12346 12347 12348 12349 12356 12357 12358 12359 12367
12368 12369 12378 12379 12389 12456 12457 12458 12459 12467
12468 12469 12478 12479 12489 12567 12568 12569 12578 12579
12589 12678 12679 12689 12789 13456 13457 13458 13459 13467
13468 13469 13478 13479 13489 13567 13568 13569 13578 13579
13589 13678 13679 13689 13789 14567 14568 14569 14578 14579
14589 14678 14679 14689 14789 15678 15679 15689 15789 16789
23456 23457 23458 23459 23467 23468 23469 23478 23479 23489
23567 23568 23569 23578 23579 23589 23678 23679 23689 23789
24567 24568 24569 24578 24579 24589 24678 24679 24689 24789
#include <stdio.h>
void main()
{
long int num,j; //判断num是否是渐升数
int i,k,flag,count=0; //flag哨兵值,count是计数器
for(num=12345;num<=56789 && count<100;num++)
{
flag=1;
j=num;
do
{
i=j%10; // 取个位数
j=j/10; //除以十,以便取其十位
k=j%10; //取十位数
if(i<=k) //符合条件
flag=0;
}while(j && flag);
if(flag==1) //满足所有条件,将其输出,并计数器自增
{
count++;
printf("%d ",num);
}
}
}
运行结果:前一百个,第一百个是:24789
12345 12346 12347 12348 12349 12356 12357 12358 12359 12367
12368 12369 12378 12379 12389 12456 12457 12458 12459 12467
12468 12469 12478 12479 12489 12567 12568 12569 12578 12579
12589 12678 12679 12689 12789 13456 13457 13458 13459 13467
13468 13469 13478 13479 13489 13567 13568 13569 13578 13579
13589 13678 13679 13689 13789 14567 14568 14569 14578 14579
14589 14678 14679 14689 14789 15678 15679 15689 15789 16789
23456 23457 23458 23459 23467 23468 23469 23478 23479 23489
23567 23568 23569 23578 23579 23589 23678 23679 23689 23789
24567 24568 24569 24578 24579 24589 24678 24679 24689 24789
追问
可这只是一道数学练习题啊,有更简单的方法吗?谢谢了
追答
那么只能使用排列组合的方法,或是穷举法啦,最后一个是56789,你不是已经知道只有126个,倒着数26个就可以啦,这总是可以试试的吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询