在上一篇中给出了一个双重循环的算法,用来达到题目要求,但是很明显,上述方法的算法的复杂度比较大, 我们给出另一种解法。
import java.io.*;
import java.util.*;
class Main
{
public static void main(String[] args)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>Scanner in=new Scanner(System.in);
<span style="white-space:pre"> </span>int i=0;
int arr,brr;
<span style="white-space:pre"> </span>while(in.hasNextInt())
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>int temp=0;
<span style="white-space:pre"> </span>arr=in.nextInt();
<span style="white-space:pre"> </span>brr=in.nextInt();
<span style="white-space:pre"> </span>double min=arr*(1+0.05/0.95);
<span style="white-space:pre"> </span>double max=arr*(1+0.10/0.9);
<span style="white-space:pre"> </span>if((arr>brr)||(brr>2000000000))//不满足要求时
<span style="white-space:pre"> </span>return ;
<span style="white-space:pre"> </span>int start=(int)(min/5);
start=start*5;
<span style="white-space:pre"> </span>for(double k=start;k<=max&&k<=brr;k=k+5)
{
if (k>=min)
<span style="white-space:pre"> </span>temp++;
}
<span style="white-space:pre"> </span>System.out.println(temp);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}