作者Oxygenair (氧气)
看板MATLAB
标题Re: [发问]请问关於回圈的题目
时间Thu Dec 13 02:17:14 2012
※ 引述《Silent50286 ()》之铭言:
: 题目是:
: 要完成排列组合C(n,k),并起使用者输入n及k,
: 若n及k 为非整数或负数时,请使用者重新输入,直到n及k为合理。
: 小妹我写出来是这样:
: n=input('请输入n :'); %请输入n值
: k=input('请输入k :'); % 输入k值
: while x==100
: if n<0||~isinteger(n)||k<0||~isinteger(k) %如果n及k为非整数或负数时
: n=input('请输入n :'); %再输入一次n值
: k=input('请输入k :'); %再输入一次k值
: end
: end
: fprintf('%d\n',factorial(n)/(factorial(k)* factorial(n-k))) %计算C(n,k)答案
: --------
: 我在测试时输入 n及k 是负数或非整数,
: 回圈好像跑不出来,是不是写错了呢?
: 请各位大大指教 !! 感谢
这部份的code很多地方有点奇怪
第一...x是什麽东西原文没定义
所以while x == 100 无法判断回圈进入的条件是什麽
第二...isinteger这指令是在判断变数是否为整数
这跟变数的type有关系
举例来说好了 matlab如果没特别说明的话
变数一般都是内定double type
所以就算是input为整数 type仍是double
所以matlab不会将他视作integer
例如 n=7,但是 isinteger(n) 依然为 0
所以判断式这样写是行不通的
以下是我个人的写法 仅供参考 若不懂可以站内信讨论
n=input('请输入n :'); %请输入n值
k=input('请输入k :'); % 输入k值
while ( n<0 || n-double(int64(n)) ~= 0 || k<0 || k-double(int64(k)) ~= 0 )
n=input('请输入n :'); %再输入一次n值
k=input('请输入k :'); %再输入一次k值
end
fprintf('%d\n',factorial(n)/(factorial(k)* factorial(n-k))) %计算C(n,k)答案
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.127.59