`
ihuashao
  • 浏览: 4721029 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

一个九位数由1-9数字组成并前N 位被N整除

阅读更多

题目:

请将123456789九个数字以特定的顺序排列,组成一个9位数ABCDEFGHI(每个数字只能使用一次),使得:
1.第一位数字组成的整数可以被1整除
2.第一、二位数字组成的整数可以被2整除
3.第一、二、三位数字组成的整数可以被3整除
4.第一、二、三、四位数字组成的整数可以被4整除
......
9.第一、二、三...九位数字组成的整数可以被9整除

分析:

通常想法是遍历9!=362280种排列。

其实第5位E一定是5,这样可缩减到8!=40320种排列

进一步分析,偶数位一定是偶数(BDFH={2,4,6,8}),奇数位一定是奇数(ACGI={1,3,7,9}),因而只需分析P(4,4)*P(4,4)=576种排列。

继续分析,4能整除 10*C+D,故D=2 或 6, 加之8能整除 10*G+H,故D,H={2,6},所以B,F={4,8},故需分析P(4,4)*P(2,2)*P(2,2)=48种排列

接着分析,3能整除 100* D+ 10 * 5+ F,所以DEF={258 ,654},ABC,GHI能被3整除

如果DEF=258,则,ABC={147,741},GHI={369,963},但1472589,7412589均不能被7整除,不符合条件,故DEF=654,

B=8,H=2.此时只有P(4,4)=24种排列

又7能整除A8C654G,故7整除(A+4C+G),而G={3,7},如果G=3,ABC为{189,789,981,987}均不满足条件,故G=7,此时ABC={183,189,381,981}中只有381符合条件,故ABCDEFGHI=381654729

此时如果需要写代码,一句就够了:

Debug.print 381654729

附几种解法:

yier_fang提供

  1. Subcnft()
  2. '定义一个数组
  3. Dima
  4. '定义字符串
  5. DimstrNumsAsString
  6. strNums="1,2,3,4,5,6,7,8,9"
  7. '开始循环
  8. Dimi,j,kAsInteger
  9. Fori=2To9
  10. a=Split(strNums,",")
  11. strNums=""
  12. Fork=0ToUBound(a)
  13. Forj=1To9
  14. If(a(k)&j)Modi=0Then
  15. IfInStr(a(k),j)=0Then
  16. strNums=strNums&","&a(k)&j
  17. EndIf
  18. EndIf
  19. Nextj
  20. Nextk
  21. strNums=Right(strNums,Len(strNums)-1)
  22. Nexti
  23. Erasea
  24. MsgBox("运行结果为:"&strNums)
  25. EndSub

代码2:

IP zhang5382 提供)

  1. SubGetit()
  2. Dima,b,c,d,e,f,g,h,iAsInteger,num1,num2AsString,xAsDouble
  3. e=5:num1="123456789":num2="此数为:":t=Timer
  4. Fora=1To9Step2
  5. Ifa=eThenGoTo10
  6. Forb=2To8Step2
  7. Forc=1To9Step2
  8. x=a+b+c
  9. Ifc=aOrc=eOrInt(x/3)<>x/3ThenGoTo30
  10. Ford=2To8Step2
  11. x=10*c+d
  12. Ifd=bOrInt(x/4)<>x/4ThenGoTo40
  13. Forf=2To8Step2
  14. x=d+e+f
  15. Iff=bOrf=dOrInt(x/3)<>x/3ThenGoTo60
  16. Forg=1To9Step2
  17. x=a*1000000+b*100000+c*10000+d*1000+e*100+f*10+g
  18. Ifg=aOrg=cOrg=eOrInt(x/7)<>x/7ThenGoTo70
  19. Forh=2To8Step2
  20. x=10*g+h
  21. Ifh=bOrh=dOrh=fOrInt(x/8)<>x/8ThenGoTo80
  22. Fori=1To9Step2
  23. Ifi=aOri=cOri=eOri=gThenGoTo90
  24. num2=num2+Mid(num1,a,1)+Mid(num1,b,1)+Mid(num1,c,1)
  25. num2=num2+Mid(num1,d,1)+Mid(num1,e,1)+Mid(num1,f,1)
  26. num2=num2+Mid(num1,g,1)+Mid(num1,h,1)+Mid(num1,i,1)
  27. num2=num2+Chr(13)+Chr(10)+"计算时间:"+Str(Timer-t)+"秒"
  28. MsgBox(num2)
  29. 90:
  30. Nexti
  31. 80:
  32. Nexth
  33. 70:
  34. Nextg
  35. 60:
  36. Nextf
  37. 40:
  38. Nextd
  39. 30:
  40. Nextc
  41. 20:
  42. Nextb
  43. 10:
  44. Nexta
  45. EndSub

代码3

彭希仁 提供)<!-- 性别在线状态 -->

  1. Dimx,sAsString
  2. Subcai()
  3. Callcaii("",0)
  4. MsgBoxs
  5. EndSub
  6. Subcaii(a,i)
  7. Forj=1To9
  8. IfNot(aLike"*"&j&"*")And(a&j)Mod(i+1)=0Then
  9. Ifi+1=9Then
  10. s=s&a&j&vbCrLf
  11. Else
  12. Callcaii(a&j,i+1)
  13. EndIf
  14. EndIf
  15. Nextj
  16. EndSub

代码4:

  1. Subcnft()
  2. getNum
  3. EndSub
  4. SubgetNum(OptionalByRefstrNumsAsString="",OptionalByRefiTurnAsInteger=1)
  5. DimiAsInteger,tmAsSingle
  6. tm=Timer
  7. Fori=1To9
  8. IfInStr(strNums,i)=0Then
  9. If(strNums&i)ModiTurn=0Then
  10. IfiTurn=9Then
  11. MsgBoxstrNums&i&vbCrLf&"用时:"&Timer-tm&"秒"
  12. Else
  13. CallgetNum(strNums&i,iTurn+1)
  14. EndIf
  15. EndIf
  16. EndIf
  17. Nexti
  18. EndSub

代码5

  1. Submacro1()
  2. Dimd,s,x,iAsLong,jAsLong,nAsCurrency,kAsLong,befitAsBoolean
  3. d=Array(1,3,7,9)
  4. s=Array(2,4,6,8)
  5. x=Split("012301320213023103120321102310321203123013021320201320312103213023012310301230213102312032013210")
  6. Fori=0To23
  7. Forj=0To23
  8. n=Val(d(Mid(x(i),1,1))&s(Mid(x(j),1,1))&d(Mid(x(i),2,1))&s(Mid(x(j),2,1))&5&s(Mid(x(j),3,1))&d(Mid(x(i),3,1))&s(Mid(x(j),4,1))&d(Mid(x(i),4,1)))
  9. befit=True
  10. Fork=2To8
  11. IfNotLeft(n,k)Modk=0Thenbefit=False:ExitFor
  12. Next
  13. Ifbefit=TrueThenDebug.Printn
  14. Next
  15. Next
  16. EndSub

分享到:
评论

相关推荐

    给定一个只包含数字[0…9]的字符串,请使用字符中的某些字符,构建一个能够整除15的最大整数,注意字符中的每个字符只能使用一次

    如果不存在0,那么我们需要检测数组中的每个数字的余数,对于余数为1和2的数字,我们可以删除最小的一个,直到数组中所有数字的余数之和能被3整除。最后,我们输出构建的最大整数。 代码实现: 以下是使用C++语言...

    小学数学数学故事能被711和13整除的数

    对于任何整数n,如果n的末三位数字组成的数x和去掉末三位后的数y满足以下条件,那么n就能被这三个数整除: 1. 如果y - x能够被7整除,那么n能被7整除。 2. 如果x - y能够被11整除,那么n能被11整除。 3. 如果y - x...

    六年级数学上册 1.3 能被2,5整除的数同步测试题(无答案) 沪教版五四制 试题.doc

    7. 用0,5,8三个数字组成的三位数能同时被2,5整除,则最小的三位数是508。 8. 2的倍数:36, 90, 102, 10, 22, 290, 634 5的倍数:90, 75, 10, 290, 985, 630 9. 能力检测题解: - 使这个数能被2整除的三位数是...

    2019 CSP-S组 第1轮 初赛 答案+解析 好--13页.pdf

    答案是D,解析是n个点最多n(n+1)/2条边,要不连通,至少去掉n-1条边n(n+1)/2-(n-1)≥28,n最小为8。 试题9:一些数字可以颠倒过来看,例如0、1、8颠倒过来看还是本身,6颠倒过来是9,9颠倒过来看还是6,其他数字...

    PTA-条件与循环-求所有由1、2、3、4这4个数字组成的素数

    本题目的目标是通过循环结构来生成所有由1、2、3、4这四个数字组成且为素数的数,并按照从小到大的顺序输出。这里我们将详细解析如何实现这个程序。 首先,我们需要了解什么是素数。素数是指除了1和它自身外,不能...

    六年级奥数(数的整除).doc

    - 从1, 2, 3, 4, 5, 6中选择数字组成能被每个数字整除的最小数,通过排除法和整除特征,可以确定组成数字为122364。 通过掌握整除的性质和特征,不仅能解决简单的数学问题,还能应对复杂的应用题,培养学生的数学...

    c语言基础练习

    --实现函数,打印出所有用1,2,3,4四个数字组成的各位数都不重复的三位数(例如234) --实现函数,打印出2000以内所有能被7整除的数,并返回个数 --实现函数,将数组从小到大排序后输出 --实现函数,输出9*9的国际...

    公务员考试-行测-数量关系解题技巧-数字特性秒杀.docx

    - 能被3、9整除的数,其所有位上的数字之和也必须能被3、9整除。 - 对于7、11、13的整除性,可以通过将数分为末三位数和剩余部分,并计算二者之差来判断。如果该差能被7、11、13整除,则原数也能被它们整除。 2. ...

    2.3.4.5等数除的特征详解

    同样,8要求百位、个位和十位组成的三位数可被8整除,9则要求所有数位上的数字和能被9整除。10的特征是末位为0,意味着同时被2和5整除。 对于11,可以通过奇数位数字和偶数位数字的差来判断,如果差能被11整除,...

    c代码-9.键盘输入一个三位数的正整数,其个位与百位相加若等于十位上的数字则输出"Yes",否则输出"No"。例如,输入"176",则输出"Yes"。输入"258",则输出"No"

    在这个C语言编程问题中,我们需要编写一段代码,它能接收用户通过键盘输入的一个三位数的正整数,然后检查这个数的个位数和百位数之和是否等于它的十位数。如果相等,程序将输出"Yes",否则输出"No"。下面我们将详细...

    六年级数学考前专项复习提高训练 数的整除精选.doc

    10. **满足特定条件的三位数**:一个三位数既能被2整除,又能被3整除,且个位、十位上相同,这个三位数最大是996,因为个位和十位相同且最大是9,同时要满足被2和3整除,所以百位是9。 11. **3和5的倍数特征**:0, ...

    10个经典程序c语言

    此段代码的目标是找出一个由多个9组成的数,使得该数能被用户输入的数整除。首先通过 `scanf` 获取用户输入的数 `zi`。然后使用 `while` 循环不断尝试增加9的数量,直到找到符合条件的数为止。循环内部首先判断当前...

    冀教版五年级数学下册应用题精选.doc

    6. 要使六位数8264的左右各添一个数码后能被45整除,意味着这个新的数既是9的倍数又是5的倍数。9的倍数条件是所有位数字之和是9的倍数,5的倍数条件是末尾是0或5。结合这两个条件,我们可以找出符合条件的六位数。 ...

    六年级迎春杯PPT学习教案.pptx

    【例7】这题要求组成一个被667整除的6位数,需要分析667的因数,以及利用整除的性质来确定数字排列。 【例9】小马虎看错数字导致的乘积是1872,可以通过除以8(5和8相差3)找到原始乘积。 【例10】两个互质的合数...

    练习P20入门版答案

    一个三位数,各位数字互不相同,十位数字比个位、百位数字之和还要大,且十位、百位数字之和不是质数。编程找出所有符合条件的三位数。 注:1. 不能手算后直接打印结果。 2. “质数”即“素数”,是指除1和自身...

    26道基础算法题.pdf

    **问题描述**:猴子第一天摘桃并吃掉一半再多吃一个,之后每天都吃前一天剩下的一半再多吃一个,到第10天只剩下1个桃子。求第一天摘了多少个桃子。 **解题思路**: - 采用逆向思维,从第10天往回推算。 - 设第\(n\)...

    补充习题(1) (14).doc

    首先,我们来看第一个问题,即用2、3、4、0这四个数字组成没有重复数字的三位数。这个问题涉及到排列的概念,因为三位数的每一位数都不能重复。排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列...

    java基础练习题

    递归函数的关键在于确定递归结束条件(if(n==1||n==2)),并在非结束条件下,递归调用自身来累加结果(return fun(n-1)+fun(n-2))。 程序2要求判断指定范围内(101-200)有多少个素数,并输出这些素数。素数是指...

    从2012年高考湖北卷数学理科第13题话回文与回文数文.pdf

    比如4位数时,回文数由对称的两半组成,因此首位和末位可以是1到9的任何数字,中间的位数可以是0到9,但因为是偶数位,中间需要对称,所以首位和末位的选择限制了中间的位数选择,导致总数为9×10^(k-1),其中k=n/2...

Global site tag (gtag.js) - Google Analytics