登录论坛

查看完整版本 : [求助]HELP HElp help


xylee
2008-03-26, 14:08
我想用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
呵呵,终于搞定了。下面是程序。

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 &...

想請問
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
题目的要求是九位数,所以必须要有一个语句来检测该数字是不是九位数字,这样的话,单个的数字是不能通过matlab现有的命令得到长度的,故将数字转化成字符串这样就可以运用matlab现有的命令length来检测该字符串的长度了,这样就实现了就为数字的检测。
程序中的b是一个字符串,在ASCII码表中,...

大概了解了@@ 感謝
不過題目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
數字可以重複出現??...
既然是排列就当然不能重复出现喽,你后来的猜想正如楼下有人说的是对的。可以用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
以上是数字不重复出现的程序。...
谢啦,非常感谢。恍然大悟啊……

dnping
2008-03-27, 21:06
哈哈,顶上,以上讨论可以作为以后会员的参考,加分!