平方十位数
题目
分析
1. 其实就是找最大的平方十位数
2. 从开方最大数倒序找开发最小数中符合平方并且每一位只用过一次的数字
2.1 最大的数就是10000000000-1 所以平方开始循环从10000(100000*100000=10000000000)开始
2.2 最小的数就是100000000 所以开方从根号1000000000(31,622.77660168379≈31623)开始
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class Main { public static void main(String[] args) { for(long i=100000;i>32000;i--){ long temp=i*i; //找10位的平方数 String s=String.valueOf(temp); //将temp转字符串 boolean flag=true; //设置布尔值 如果不符合题意就退出 for(int j=0;j<10;j++){ if(s.indexOf(""+j)==-1){ //如果0-9不重复的使用 那么就不会有-1出现(每个数字都出现过) flag=false; break; //不符合就退出 } } if(flag){ //符合题意就弹出i*i=temp System.out.println(temp); break; } }
} }
|
结果
三角形面积(海伦公式)
题目
分析
1. 通过把三角形凑成正方形,利用差计算结果
2. 海伦公式:
2.1 s=(a+b+c)/2 (必须先计算出a和b和c)
2.2 area=sqrt(s*(s-a)*(s-b)*(s-c));
代码
1 2 3 4 5 6 7 8 9 10 11 12
| // 海伦公式 public class Main { public static void main(String[] args) { double a = Math.sqrt((6.4 - 2.3) * (6.4 - 2.3) + (3.1 - 2.5) * (3.1 - 2.5)); //分别计算三个边的长度 double b = Math.sqrt((5.1 - 2.3) * (5.1 - 2.3) + (7.2 - 2.5) * (7.2 - 2.5)); double c = Math.sqrt((6.4 - 5.1) * (6.4 - 5.1) + (7.2 - 3.1) * (7.2 - 3.1)); double s = (a + b + c) / 2.0; //计算s double area = Math.sqrt(s * (s - a) * (s - b) * (s - c)); System.out.println(area); } }
|
结果
最大乘积(dfs)
题目
分析
1. 一定是结果
代码
结果