题目:
请将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
附几种解法:
由提供
-
Subcnft()
-
-
Dima
-
-
DimstrNumsAsString
-
strNums="1,2,3,4,5,6,7,8,9"
-
-
Dimi,j,kAsInteger
-
Fori=2To9
-
a=Split(strNums,",")
-
strNums=""
-
Fork=0ToUBound(a)
-
Forj=1To9
-
If(a(k)&j)Modi=0Then
-
IfInStr(a(k),j)=0Then
-
strNums=strNums&","&a(k)&j
-
EndIf
-
EndIf
-
Nextj
-
Nextk
- strNums=Right(strNums,Len(strNums)-1)
-
Nexti
-
Erasea
-
MsgBox("运行结果为:"&strNums)
-
EndSub
代码2:
(IP 提供)
-
SubGetit()
-
Dima,b,c,d,e,f,g,h,iAsInteger,num1,num2AsString,xAsDouble
-
e=5:num1="123456789":num2="此数为:":t=Timer
-
Fora=1To9Step2
-
Ifa=eThenGoTo10
-
Forb=2To8Step2
-
Forc=1To9Step2
- x=a+b+c
-
Ifc=aOrc=eOrInt(x/3)<>x/3ThenGoTo30
-
Ford=2To8Step2
- x=10*c+d
-
Ifd=bOrInt(x/4)<>x/4ThenGoTo40
-
Forf=2To8Step2
- x=d+e+f
-
Iff=bOrf=dOrInt(x/3)<>x/3ThenGoTo60
-
Forg=1To9Step2
- x=a*1000000+b*100000+c*10000+d*1000+e*100+f*10+g
-
Ifg=aOrg=cOrg=eOrInt(x/7)<>x/7ThenGoTo70
-
Forh=2To8Step2
- x=10*g+h
-
Ifh=bOrh=dOrh=fOrInt(x/8)<>x/8ThenGoTo80
-
Fori=1To9Step2
-
Ifi=aOri=cOri=eOri=gThenGoTo90
- num2=num2+Mid(num1,a,1)+Mid(num1,b,1)+Mid(num1,c,1)
- num2=num2+Mid(num1,d,1)+Mid(num1,e,1)+Mid(num1,f,1)
- num2=num2+Mid(num1,g,1)+Mid(num1,h,1)+Mid(num1,i,1)
-
num2=num2+Chr(13)+Chr(10)+"计算时间:"+Str(Timer-t)+"秒"
- MsgBox(num2)
- 90:
-
Nexti
- 80:
-
Nexth
- 70:
-
Nextg
- 60:
-
Nextf
- 40:
-
Nextd
- 30:
-
Nextc
- 20:
-
Nextb
- 10:
-
Nexta
-
EndSub
代码3
( 提供)<!-- 性别在线状态 -->
-
Dimx,sAsString
-
Subcai()
-
Callcaii("",0)
- MsgBoxs
-
EndSub
-
Subcaii(a,i)
-
Forj=1To9
-
IfNot(aLike"*"&j&"*")And(a&j)Mod(i+1)=0Then
-
Ifi+1=9Then
- s=s&a&j&vbCrLf
-
Else
-
Callcaii(a&j,i+1)
-
EndIf
-
EndIf
-
Nextj
-
EndSub
代码4:
-
Subcnft()
- getNum
-
EndSub
-
SubgetNum(OptionalByRefstrNumsAsString="",OptionalByRefiTurnAsInteger=1)
-
DimiAsInteger,tmAsSingle
- tm=Timer
-
Fori=1To9
-
IfInStr(strNums,i)=0Then
-
If(strNums&i)ModiTurn=0Then
-
IfiTurn=9Then
-
MsgBoxstrNums&i&vbCrLf&"用时:"&Timer-tm&"秒"
-
Else
-
CallgetNum(strNums&i,iTurn+1)
-
EndIf
-
EndIf
-
EndIf
-
Nexti
-
EndSub
代码5
-
Submacro1()
-
Dimd,s,x,iAsLong,jAsLong,nAsCurrency,kAsLong,befitAsBoolean
- d=Array(1,3,7,9)
- s=Array(2,4,6,8)
-
x=Split("012301320213023103120321102310321203123013021320201320312103213023012310301230213102312032013210")
-
Fori=0To23
-
Forj=0To23
- 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)))
-
befit=True
-
Fork=2To8
-
IfNotLeft(n,k)Modk=0Thenbefit=False:ExitFor
-
Next
-
Ifbefit=TrueThenDebug.Printn
-
Next
-
Next
-
EndSub
分享到:
相关推荐
如果不存在0,那么我们需要检测数组中的每个数字的余数,对于余数为1和2的数字,我们可以删除最小的一个,直到数组中所有数字的余数之和能被3整除。最后,我们输出构建的最大整数。 代码实现: 以下是使用C++语言...
对于任何整数n,如果n的末三位数字组成的数x和去掉末三位后的数y满足以下条件,那么n就能被这三个数整除: 1. 如果y - x能够被7整除,那么n能被7整除。 2. 如果x - y能够被11整除,那么n能被11整除。 3. 如果y - x...
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整除的三位数是...
答案是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,其他数字...
本题目的目标是通过循环结构来生成所有由1、2、3、4这四个数字组成且为素数的数,并按照从小到大的顺序输出。这里我们将详细解析如何实现这个程序。 首先,我们需要了解什么是素数。素数是指除了1和它自身外,不能...
- 从1, 2, 3, 4, 5, 6中选择数字组成能被每个数字整除的最小数,通过排除法和整除特征,可以确定组成数字为122364。 通过掌握整除的性质和特征,不仅能解决简单的数学问题,还能应对复杂的应用题,培养学生的数学...
--实现函数,打印出所有用1,2,3,4四个数字组成的各位数都不重复的三位数(例如234) --实现函数,打印出2000以内所有能被7整除的数,并返回个数 --实现函数,将数组从小到大排序后输出 --实现函数,输出9*9的国际...
- 能被3、9整除的数,其所有位上的数字之和也必须能被3、9整除。 - 对于7、11、13的整除性,可以通过将数分为末三位数和剩余部分,并计算二者之差来判断。如果该差能被7、11、13整除,则原数也能被它们整除。 2. ...
同样,8要求百位、个位和十位组成的三位数可被8整除,9则要求所有数位上的数字和能被9整除。10的特征是末位为0,意味着同时被2和5整除。 对于11,可以通过奇数位数字和偶数位数字的差来判断,如果差能被11整除,...
在这个C语言编程问题中,我们需要编写一段代码,它能接收用户通过键盘输入的一个三位数的正整数,然后检查这个数的个位数和百位数之和是否等于它的十位数。如果相等,程序将输出"Yes",否则输出"No"。下面我们将详细...
10. **满足特定条件的三位数**:一个三位数既能被2整除,又能被3整除,且个位、十位上相同,这个三位数最大是996,因为个位和十位相同且最大是9,同时要满足被2和3整除,所以百位是9。 11. **3和5的倍数特征**:0, ...
此段代码的目标是找出一个由多个9组成的数,使得该数能被用户输入的数整除。首先通过 `scanf` 获取用户输入的数 `zi`。然后使用 `while` 循环不断尝试增加9的数量,直到找到符合条件的数为止。循环内部首先判断当前...
6. 要使六位数8264的左右各添一个数码后能被45整除,意味着这个新的数既是9的倍数又是5的倍数。9的倍数条件是所有位数字之和是9的倍数,5的倍数条件是末尾是0或5。结合这两个条件,我们可以找出符合条件的六位数。 ...
【例7】这题要求组成一个被667整除的6位数,需要分析667的因数,以及利用整除的性质来确定数字排列。 【例9】小马虎看错数字导致的乘积是1872,可以通过除以8(5和8相差3)找到原始乘积。 【例10】两个互质的合数...
一个三位数,各位数字互不相同,十位数字比个位、百位数字之和还要大,且十位、百位数字之和不是质数。编程找出所有符合条件的三位数。 注:1. 不能手算后直接打印结果。 2. “质数”即“素数”,是指除1和自身...
**问题描述**:猴子第一天摘桃并吃掉一半再多吃一个,之后每天都吃前一天剩下的一半再多吃一个,到第10天只剩下1个桃子。求第一天摘了多少个桃子。 **解题思路**: - 采用逆向思维,从第10天往回推算。 - 设第\(n\)...
首先,我们来看第一个问题,即用2、3、4、0这四个数字组成没有重复数字的三位数。这个问题涉及到排列的概念,因为三位数的每一位数都不能重复。排列是指从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列...
递归函数的关键在于确定递归结束条件(if(n==1||n==2)),并在非结束条件下,递归调用自身来累加结果(return fun(n-1)+fun(n-2))。 程序2要求判断指定范围内(101-200)有多少个素数,并输出这些素数。素数是指...
比如4位数时,回文数由对称的两半组成,因此首位和末位可以是1到9的任何数字,中间的位数可以是0到9,但因为是偶数位,中间需要对称,所以首位和末位的选择限制了中间的位数选择,导致总数为9×10^(k-1),其中k=n/2...