1. 平方末尾
能够表示为某个整数的平方的数字称为“平方数” 比如,25,64 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数。 因为平方数的末位只可能是:[0, 1, 4, 5, 6, 9] 这6个数字中的某个。 所以,4325435332必然不是平方数。 如果给你一个2位或2位以上的数字,你能根据末位的两位来断定它不是平方数吗? 请计算一下,一个2位以上的平方数的最后两位有多少种可能性?
思路分析:
- 先创建Set集合,用于存储和统计可能性
- Set集合可以去重
因为是否为平方数,只和末尾两位有关系,所以我们只需要验证 10~100的平方即可 ```java public class 平方末尾 {
public static void main(String[] args) {
Set<String> set = new HashSet<>();//创建set集合//在10 ~100的平方找出末两位for(int i = 10;i<100;i++){int length = String.valueOf(i * i).length();//获取平方数的长度String str = String.valueOf(i*i).substring(length-2,length);//截取平方数的末尾两位 100 sub(3-2=1) (1,3)set.add(str);//统计末尾两位数的情况.}System.out.println(set.size());
}
}
<a name="04RyQ"></a># 2. 全排列问题> 有ABCDE五个字母,他们之间一共可以组成多少种顺序不同的组合(字母不能重复)<a name="eMAcP"></a>## 思路分析```javaimport java.util.Stack;/*** abc 多少种组合排序*/public class _C全排列 {static int count = 0; //用于记录有多少种组合public static void main(String[] args) {//创建数组用于存放abcdechar c[] = new char[3];//创建一个bool类型数据,用于标记 a b c d e是否boolean b[] = new boolean[c.length];f(0,c,b);}public static void f(int step,char c[],boolean b[]){if(step == 3){ //等于5时说明完成一次组合//打印数组for(char c1:c){System.out.print(c1+" ");}System.out.println();count++;}//循环遍历组合for(int i =0;i<c.length;i++){ //if(!b[i]){ //如果某一位还没有被选中过c[step] = (char) (i+'a');b[i] = true; //被选中过,标记为truef(step+1,c,b);b[i] = false;//回溯}}}}
3. 背包问题(动态规划)
package com.atguo.demo;/*** 01背包问题的描述:* 有编号分别为a,b,c,d,e的五件物品,* 它们的重量分别是2,2,6,5,4,* 它们的价值分别是6,3,5,4,6,* 现在给你个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?*/public class DpATest {static int f[][] = new int[5][9];static int w[] = {0,2,3,4,5};static int v[] = {0,3,4,5,8};public static void main(String[] args) {for(int i = 1;i<5;i++){ //i件物品for(int j = 1;j<9;j++){ //j:背包的容量if(w[i]>j){f[i][j] = f[i-1][j];}else{f[i][j] = Math.max(f[i-1][j],f[i-1][j-w[i]]+v[i]);}}}for(int i = 1;i<5;i++){System.out.println();for(int j = 1;j<9;j++){ //j:背包的容量System.out.print(f[i][j]+" ");}}System.out.println(f[4][8]);}}
4. 年龄问题(简单遍历)
/*** s夫人一向很神秘。这会儿有人问起她的年龄,她想了想说:* “20年前,我丈夫的年龄刚好是我的2倍,而现在他的年龄刚好是我的1.5倍”。* 你能算出s夫人现在的年龄吗?*/public class _01年龄问题 {public static void main(String[] args) {for(int i = 1;i<100;i++){for(int j = 1;j<100;j++){if((i-20) == (j-20)*2 && i == j*1.5 ){System.out.println(i+" "+j);}}}}
5. 奇数倍数
/*** 请你找到最小的整数 X 同时满足:* • X 是 2019 的整倍数* • X 的每一位数字都是奇数* 【答案提交】* 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一* 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。*/public class _A奇数倍数 {public static void main(String[] args) {int x = 2019;while (true){if(f(x)){System.out.println(x);return;}x+=2019;}}//比较个位数public static boolean f(int n ){int x = n;while (x!=0){if(f1(x%10)){//如果有一个偶数return false;}x/= 10;}return true;}public static boolean f1(int n1){return (n1&1)!=1;//偶数返回true}}
6. 七星末尾(回溯)
package com.atguo.demo2016;import java.util.HashSet;import java.util.Set;/*** 能够表示为某个整数的平方的数字称为“平方数”* 比如,25,64* 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数。* 因为平方数的末位只可能是:[0, 1, 4, 5, 6, 9] 这6个数字中的某个。* 所以,4325435332必然不是平方数。** 如果给你一个2位或2位以上的数字,你能根据末位的两位来断定它不是平方数吗?** 请计算一下,一个2位以上的平方数的最后两位有多少种可能性?*/public class 平方末尾 {public static void main(String[] args) {Set<String> set = new HashSet<>();//创建set集合//在10 ~100的平方找出末两位for(int i = 10;i<10000;i++){int length = String.valueOf(i * i).length();//获取平方数的长度String str = String.valueOf(i*i).substring(length-2,length);//截取平方数的末尾两位 100 sub(3-2=1) (1,3)set.add(str);//统计末尾两位数的情况.}System.out.println(set.size());}}
