题目:小平方
语言:java
语法错误:java里面的 /是整除运算符
比如:int n=3/2;
n=1;//注意这里不是整除运算符
逻辑:本质上是一个特殊的数问题。这里需要注意整除会丢失精度,比如整除是向下取整。会导致一些特别的数不会被计入。
代码展示:
import java.util.*;
public class Main{
static int n;
static boolean judge(int x){
double num=(double)n/2;
if((x*x%n)<num){
return true;
}
return false;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
int count=0;
for(int i=1;i<n;i++){
if(judge(i)){
count=count+1;
}
}
System.out.println(count);
}
}
收获:1.可以使用static 修饰变量,被修饰的变量的值不会发生改变。
2.强制类型转换:(double) n;
3.可以使用其他方法 ,例如:(i*i%n)*2<n;//这种就不会出现丢失精度的问题。