MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   [求助]HELP HElp help (https://www.labfans.com/bbs/showthread.php?t=1878)

xylee 2008-03-26 14:08

[求助]HELP HElp help
 
我想用matlab做下面的一个问题:
找出所有由1-9这9个数排列而成的并且还是3的13次方的倍数的9位数。
我用其他语言已经实现,但是因为刚接触MATLAB,还没有用它实现。还望高手指教。
我的EMAIL:[email protected]
QQ:814663606.
谢了。

shiqiang 2008-03-26 19:14

呵呵,终于搞定了。下面是程序。

x=1;
while x<10^9/3^13
a=x*3^13;
b=int2str(a);
n=length(b);
x=x+1;
c=(b-48)|0;
if n==9 & all(c)==1
fprintf('%d\n',a)
end
end

fgabertb 2008-03-26 20:14

數字可以重複出現??

fgabertb 2008-03-27 16:36

[QUOTE=shiqiang;7318]呵呵,终于搞定了。下面是程序。

x=1;
while x<10^9/3^13
a=x*3^13;
b=int2str(a);
n=length(b);
x=x+1;
c=(b-48)|0;
if n==9 &...[/QUOTE]

想請問
b=int2str(a);
n=length(b);
為啥要把a轉成字串 並看他的長度呢?
c=(b-48)|0;
48是怎看的
還有後面的 if 迴圈 都不太懂@@
能指導一下嗎:cool:

shiqiang 2008-03-27 16:47

题目的要求是九位数,所以必须要有一个语句来检测该数字是不是九位数字,这样的话,单个的数字是不能通过matlab现有的命令得到长度的,故将数字转化成字符串这样就可以运用matlab现有的命令length来检测该字符串的长度了,这样就实现了就为数字的检测。
程序中的b是一个字符串,在ASCII码表中,数字与其相应的码值有一个48的差值,故剪掉48后这样原来的数字a分解为一个由每一位组成的字符串了。可以进行逻辑运算了。

fgabertb 2008-03-27 17:00

[QUOTE=shiqiang;7387]题目的要求是九位数,所以必须要有一个语句来检测该数字是不是九位数字,这样的话,单个的数字是不能通过matlab现有的命令得到长度的,故将数字转化成字符串这样就可以运用matlab现有的命令length来检测该字符串的长度了,这样就实现了就为数字的检测。
程序中的b是一个字符串,在ASCII码表中,...[/QUOTE]

大概了解了@@ 感謝
不過題目1~9排列 應該是想取不重複出現吧
即1~9數字調順序~~ 我是這樣覺得的 呵呵

shiqiang 2008-03-27 17:32

x=1;
while x<10^9/3^13
a=x*3^13;
b=int2str(a);
n=length(b);
y=sort(b);
z='123456789';
x=x+1;
c=(b-48)|0;
if n==9 & all(c)==1 & y==z
fprintf('%d\n',a)
end
end

shiqiang 2008-03-27 17:35

以上是数字不重复出现的程序。

xylee 2008-03-27 20:33

[QUOTE=fgabertb;7332]數字可以重複出現??...[/QUOTE]
既然是排列就当然不能重复出现喽,你后来的猜想正如楼下有人说的是对的。可以用P = perms(v)来做,不过运算量相对较大。我打算用a=123456789/3^13,b=987654321/3^13.然后设c,令a<c<b,那么要求的9位数i=3^13*c,只需运算几百次。再然后判断 i 中是否有重复元素。但是,我就是在这个地方停住了。

xylee 2008-03-27 20:38

[QUOTE=shiqiang;7398]以上是数字不重复出现的程序。...[/QUOTE]
谢啦,非常感谢。恍然大悟啊……


所有时间均为北京时间。现在的时间是 04:41

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.