一个最多九位当n为大于2的整数时n,其中一个数位的数字未知,问这个数位上使用哪些数字

一个九位数由1-9数字组成并前N 位被N整除 - 技术代码资料库 - ITeye博客
请将九个数字以特定的顺序排列,组成一个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},但12589均不能被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=
此时如果需要写代码,一句就够了:
Debug.print
附几种解法:
DimstrNumsAsString
strNums="1,2,3,4,5,6,7,8,9"
Dimi,j,kAsInteger
a=Split(strNums,",")
strNums=""
Fork=0ToUBound(a)
If(a(k)&j)Modi=0Then
IfInStr(a(k),j)=0Then
strNums=strNums&","&a(k)&j
strNums=Right(strNums,Len(strNums)-1)
MsgBox("运行结果为:"&strNums)
SubGetit()
Dima,b,c,d,e,f,g,h,iAsInteger,num1,num2AsString,xAsDouble
e=5:num1="":num2="此数为:":t=Timer
Fora=1To9Step2
Ifa=eThenGoTo10
Forb=2To8Step2
Forc=1To9Step2
Ifc=aOrc=eOrInt(x/3)&&x/3ThenGoTo30
Ford=2To8Step2
Ifd=bOrInt(x/4)&&x/4ThenGoTo40
Forf=2To8Step2
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
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)
( 提供)&!-- 性别在线状态 --&
Dimx,sAsString
Callcaii("",0)
Subcaii(a,i)
IfNot(aLike"*"&j&"*")And(a&j)Mod(i+1)=0Then
Ifi+1=9Then
s=s&a&j&vbCrLf
Callcaii(a&j,i+1)
SubgetNum(OptionalByRefstrNumsAsString="",OptionalByRefiTurnAsInteger=1)
DimiAsInteger,tmAsSingle
IfInStr(strNums,i)=0Then
If(strNums&i)ModiTurn=0Then
IfiTurn=9Then
MsgBoxstrNums&i&vbCrLf&"用时:"&Timer-tm&"秒"
CallgetNum(strNums&i,iTurn+1)
Submacro1()
Dimd,s,x,iAsLong,jAsLong,nAsCurrency,kAsLong,befitAsBoolean
d=Array(1,3,7,9)
s=Array(2,4,6,8)
x=Split("")
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
IfNotLeft(n,k)Modk=0Thenbefit=False:ExitFor
Ifbefit=TrueThenDebug.Printn
浏览: 2466732 次
来自: 济南
inffas32.asm(594) inffas32.asm( ...
2004年发表的,现在对比着看,感觉国情还是有所变化了。
这个方法有效果,但还是绕了一大圈。另外:如果每次这样使用,会造 ...
亲,请把用到的包贴出来好么?这版本问题搞得我头大······· ...
多命令执行:cmd /k reg delete &H ...pascal 对于一个自然数n(1&=n&=109),求各个数位上的数字之和。
的详细解析用repeat循环
本回答由提问者推荐扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
给定一个整数N,如何求出该数的最高位数字?比如:N=1,最高位是1 N=10,最高位是1 N=9999,最高位是9
扫二维码下载作业帮
2亿+学生的选择
先求logN,取整的B,别四舍五入,小数全舍去.后整除10的B次方,
logN怎么求?查表?N可以是任意整数的。
一般log都可以转换成几个基本log的乘积log2、log3、log5..这里面有技巧的,高中的时候我还会,现在忘了,呵呵
为您推荐:
其他类似问题
[ N/(10^m) ] ,m为整数N的位数
不知道N有多少位。
将整数N连续除十,剩下的最后的那个余数就是该数的最高位数字.推广到一般情况下时,怎么求?
N特别大时(无穷大?),连续除十要除多少次?这样是不行的。那设定一个数为10^n
先比较是否比10^n大,再确定n是加大还是减少。数学问题需要严谨的步骤证明,不是凭想象。正好比x^n+y^n=z^n难倒了多少人。
我想要的是结果和对结果的证明...
那设定一个数为10^n
先比较是否比10^n大,再确定n是加大还是减少。
数学问题需要严谨的步骤证明,不是凭想象。正好比x^n+y^n=z^n难倒了多少人。
我想要的是结果和对结果的证明
扫描下载二维码本帖子已过去太久远了,不再提供回复功能。涓婁紶鍙戝竷
禄 鍦

我要回帖

更多关于 已知n为正整数 的文章

 

随机推荐