2020.7.13课堂笔记(练习题思路分析)

1、题目:判断2-100之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到(这个数),如果能被整除,则表明此数不是素数,反之是素数。?

  • 思路分析:
    素数:只能被1和其本身整除;
    合数:除了1和其本身之外,还有其他因数
    判断任意一个数是不是质数,就被从2开始到他自身整除(不包含自身),如果还可以被别的因数i整除,就判断他不是质数
/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 13:42
 * @Description:判断2-100之间有多少个素数,并输出所有素数。
 **/
public class Test1 {
     
    public static void main(String[] args) {
     
        //素数:只能被1和其本身整除;合数:除了1和其本身之外,还有其他因数
        //1、任意一个数如何判断其是不是质数/素数
        /*int num=9;
        int count=0;
        for (int i = 2; i 

        //2、一个是要从2到100循环,循环的每一个数,都重复执行上述操作
        //3、如果有一个质数产生,计数器+1,同时打印该质数
        int count=0;
        for (int num = 2; num <=100 ; num++) {
     
            int flag=0;//判断是否是合数的标志位
            for (int j = 2; j <num ; j++) {
     
                if(num%j==0){
     
                    //代表num是合数
                    flag=1;
                    break;
                }
            }
            if(flag!=0){
     
                //合数
            }else{
     
                //质数
                count++;
                System.out.println("质数"+num);
            }
        }
        System.out.println("一共有"+count+"个质数");
    }
}

2、题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:利用for循环控制100-999的数,每个数分解出个位,十位,百位。

  • 思路分析:
    判断一个数是不是“水仙花数”
    1、取出该三位数各位的数字
    2、对这三个数字求立方
    3、把立方的结果求和,与该数进行比较
/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 14:04
 * @Description:"水仙花数"
 **/
public class Test2 {
     
    public static void main(String[] args) {
     
        //判断一个数是不是“水仙花数”
        //1、取出该三位数各位的数字
        //2、对这三个数字求立方
        //3、把立方的结果求和,与该数进行比较
        /*int num=153;
        int a=num/100;
        int b=num/10%10;
        int c=num%10;
        int sum=a*a*a+b*b*b+c*c*c;
        if(num==sum){
            System.out.println(num+"是水仙花数");
        }*/
        for (int i = 100; i <1000 ; i++) {
     
            int a=i/100;
            int b=i/10%10;
            int c=i%10;
            int sum=a*a*a+b*b*b+c*c*c;
            if(sum==i){
     
                System.out.println(i+"是水仙花数");
            }
        }
    }
}

3、题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n不等于k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

  • 思路分析:
    先选择一个最小的质数k,判断正整数n能不能被k整除
    如果能除尽,把n/k的值赋值给n,再次判定新的n能否被k整除
    直到不可以,k=k+1循环判定,
    如果k=n的时候,循环结束,打印k/n的值
import java.util.Scanner;
/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 14:13
 * @Description:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
 **/
public class Test3 {
     
    public static void main(String[] args) {
     
/*        int num=90;
        System.out.print(num+"=");
        num/=2;
        System.out.print(2);
        num/=3;
        System.out.print("*"+3);
        num/=3;
        System.out.print("*"+3);
        num/=5;
        System.out.print("*"+5);
        if(num==1){
            System.out.println("结束");
        }*/
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个正整数");
        int num=sc.nextInt();
        System.out.print(num+"=1");
        for (int i = 2; i <=num ; i++) {
     
            if(i==num){
     
                System.out.print("*"+num);
                break;
            }else{
     
                if(num%i==0){
        //能除尽的时候才除
                    num/=i;
                    System.out.print("*"+i);
                    i--;
                }
            }
        }
    }
}

4、题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如5+55+555+5555+55555(此时共有5个数相加)。
程序分析:关键是计算出每一项的值。。

  • 思路分析:
    举例:输入4, 4 * 10+4=44,44 * 10+4=444,444*10+4=4444
    最后求和
import java.util.Scanner;

/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 14:41
 * @Description:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
 **/
public class Test4 {
     
    public static void main(String[] args) {
     
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个10以内的正整数:");
        int a=sc.nextInt();
        int sum=0;
        int num=0;
        for (int i = 1; i <=a ; i++) {
     
            num=+a;
            sum+=num;
        }
        System.out.println(sum);
    }
}

5、题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数

  • 思路分析:
    找出一个数的所有因数,然后求和
/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 14:50
 * @Description:一个数如果恰好等于它的因子之和,这个数就称为"完数"
 * 例如6=1+2+3.编程找出1000以内的所有完数
 **/
public class Test5 {
     
    public static void main(String[] args) {
     
        for (int i = 2; i <=1000 ; i++) {
     
            //求某个数的所有因数
            int sum=0;//每次循环初始化一次求和
            for (int j = 1; j <i ; j++) {
     
                if(i%j==0){
     
                    sum+=j;
                }
            }
            if(i==sum){
     
                System.out.println("完数:"+i);
            }
        }
    }
}

6、题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高

/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 14:56
 * @Description:一球从100米高度自由落下,每次落地后反跳回原高度的一半;
 * 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高
 **/
public class Test6 {
     
    public static void main(String[] args) {
     
        double height=100;
        double total=height;
        for(int i=1;i<=10;i++){
     
            height/=2;
            System.out.println("第"+i+"次反弹的高度为"+height);
            if(i==10){
     
                break;
            }
            total+=height*2;
        }
        System.out.println(total);

    }
}


7、题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 15:04
 * @Description:有1、2、3、4个数字,
 * 能组成多少个互不相同且无重复数字的三位数?都是多少?
 **/
public class Test7 {
     
    public static void main(String[] args) {
     
        int count=0;
        for (int i = 1; i <=4 ; i++) {
       //百位数字
            for (int j = 1; j <=4 ; j++) {
     //十位数字
                if(j==i)continue;
                for (int k = 1; k <=4; k++) {
       //个位数字
                    if(k==i || k==j) continue;
                    System.out.println(i+""+j+k);
                    count++;
                }               
            }            
        }
        System.out.println("一共"+count+"个");
    }
}

9、题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,另外由这个数的开方数自乘得到平方数,进行比较

  • 思路分析:
    先设置两个变量,分别为(i+100),(i+168),那么就定义一个标志flag,先找到一个数num是完全平方数赋值给(i+100),这个时候flag发生改变,找到了,然后num不断自增,继续找有没有一个num也为完全平方数,并且与(i+168)相等,找到了就打印
/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 15:18
 * @Description:一个整数,它加上100后是一个完全平方数,
 * 再加上168又是一个完全平方数,请问该数是多少?
 **/
public class Test9 {
     
    public static void main(String[] args) {
     
        for(int i=0;i<100000;i++){
     
            //1、这个数加上100以后是完全平方数
            //2、这个数加上168以后是完全平方数
            int num1=i+100;
            int num2=i+268;
            boolean flag=false;
            int tmp=0;
            for (int j = 11; j <400 ; j++) {
     
                if(num1==j*j){
     
                    tmp=j;
                    flag=true;
                }
                if(flag){
     
                    if(num2==j*j){
     
                        System.out.println(i+"+100="+tmp*tmp);
                        System.out.println(i+"+268="+num2);
                    }
                }
            }
        }
    }
}

11、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
程序分析:请抓住分子与分母的变化规律。

  • 思路分析:
    后面一个数num2的分子等于前一个数num1的分子分母之和
    后面一个数num2的分母等于前一个数num1的分子
/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 15:51
 * @Description:
 **/
public class Test11 {
     
    public static void main(String[] args) {
     
        int a=1;
        int b=2;
        double sum=b/(double)a;
        for(int i=2;i<=20;){
     
            a=a+b;
            sum+=a/(double)b;
            i++;
            if(i==21){
     
                break;
            }
            b=a+b;
            sum+=b/(double)a;
            i++;
        }
        System.out.println(sum);
    }
}

15、题目:打印出杨辉三角形(要求打印出10行如下图)
程序分析:
1
11
121
1331
14641
15101051

  • 思路分析:二项式系数
    组合的定义:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。
    (a+b)^n
    an+n*an-1*b+(n-1)*n *an-2*b2…
    1 n n(n-1)/2 n(n-1)(n-2)/2 *3
    计算公式:
    排列组合;C(n,m)=C(n,n-m)。(n≥m)
/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 16:09
 * @Description:杨辉三角
 **/
public class Test15 {
     
    public static void main(String[] args) {
     
        int num=5;
        for (int i = 0; i <num ; i++) {
     
            int v=1;
            int a=i;
            for (int j = 0; j <=i ; j++) {
     
                if(j==0) {
     
                    System.out.print(1+" ");
                }else {
     
                    v=v/j;
                    System.out.print(v+" ");
                }
                v*=a;
                a--;
            }
            System.out.println();
        }

    }
}

16、题目:求0—7所能组成的奇数个数。
思路分析:
可以组成从1位数到8位数,分别统计可以组成的个数
1位数:4个(1、3、5、7)
最高位:6个(0~7这8个数,出去个位和0有6种选择)
出去个位数和最高位(8-2)(8-3)……

/**
 * @Author: ChaoKeAiMuZhi
 * @Date: 2020/7/13 16:37
 * @Description:
 **/
public class Test16 {
     
    //结尾为1、3、5、7的就为奇数,应该是每个数只能用1遍
    //个位:4种可能  最高位:7-1种可能  其余位数:8-2 8-3 8-4
    public static void main(String[] args) {
     
        int num=0;
        int sum=0;
        for (int i = 1; i <=8 ; i++) {
     
            for (int j = 1; j <=i; j++) {
     
                if(j==1){
     
                    num=4;//个位
                }else if(j==2){
     
                    num=num*6;//最高位
                }else{
     
                    num=num*(8-j+1);
                }
            }
            System.out.println(i+"位数符合条件的有"+num+"个");
            sum+=num;
        }
        System.out.println("0—7所能组成的奇数个数是:"+sum);
    }

}

你可能感兴趣的:(笔记)