回 帖 发 新 帖 刷新版面

主题:求教一个简单的函数问题


要求: 输入三个数a,b,c,分别为被除数,除数和余数.
      输出在a和c的条件下b的数目.

谢谢各位!

回复列表 (共7个回复)

沙发

loading ...

板凳

 var
a,c,i,result:integer;

begin
writeln(''input a'');
readln(a);
writeln(''input c'');
readln(c);

result:=0;

  a:=a-c;
  for i:=c to a  do {从c开始循环,比c小的肯定没除干净}
   if (a mod i=0)and(i<>c) then result:=result+1;

   {这个判断很关键,a mod i 相信大家能看懂,后面的i<>c解释如下:
   比如说 除18(a)余3(c)的数有几个? 显然是5和15这两个数.但是如果没有i<>c的话,
   就会把3也算进去,因为此时(a=c),所以应该排除.}



writeln(''the answer is '',result);

end.


3 楼

希望大家多提意见
侃侃更优的算法
代码的优化是无止尽的 (qq:390573927)

4 楼

太谢谢你了!
两封帖子就你回得让我最满意!
真的很感激!
交个朋友好吗?

5 楼

对了
这个程序可以优化
只要循环从c+1 开始
就不用加a<>c的判断了

6 楼

同意同意
我的程序。
program aaa;
  var a,c,i,s:integer;
begin
  readln(a,c);
  s:=0;
  for i:=c+1 to a-c do
    if (a mod i=c) then inc(s);
  writeln(s);
end.

7 楼

当输入的a=c会出现什么情况呢?
显然ans->+∞ ……

我来回复

您尚未登录,请登录后再回复。点此登录或注册