day03

今天的主要内容是java语句的练习

if else 语句

流程框图
这里写图片描述

public static void main(String [] args){
        int x = 0;
        Scanner scanner = new Scanner(System.in);
        x = scanner.nextInt();
        if(x<=1){
            System.out.println(x);
        }else if(x>=10){
            System.out.println(4*x);
        }else{
            System.out.println(3*x-2);
        }
    }

输出
这里写图片描述

输入一个十进制的数,将它转换成二进制,并且输出有几个1

设计思路:
首先,想要知道这个数转换成二进制有多少位,可以将它和2的n次幂比较大小,当这个数刚好小于2的m次幂时,这个数转换成二进制就是m-1位。
然后开启一个循环,计算输入的数s除以2的余数,如果是1,则计数器+1,并且简历一个字符串+1,如果是0就只有字符串+0。判断完成后,s向右移一位,再循环。
最后将字符串反向输出就可以得到该数字的二进制表示形式(这里我用的网上的方法,等学了数组后再操作一次)直接输出计数器的值就是1的个数。

import java.util.Scanner;
public class ErJinZhi {
    public static void main(String[] args){
        int s = 0;
        int count=0;
        int m = 1;
        int n = 0;
        String str = "";
        Scanner scanner = new Scanner(System.in);
        s = scanner.nextInt();
        while(m<=s){
            m*=2;
            n++;
        }
        System.out.println(n+"位");
        for(int j = 0;j<n;j++){
            if(s%2==1){
                count++;
                str+=1;
            }else{
                str+=0;
            }
            s>>=1;
        }
        System.out.println(count+"个1");
        System.out.println(new StringBuilder(str).reverse().toString());
    }
}

输出结果
这里写图片描述

计算1+3+5+…(2(20)-1)【里面是20次幂】
public static void main(String[] args){
        int count = 0;
        int i = 0;
        int k = 1;
        for(int j = 1; j <= 20; j++){
            k *= 2;
            i = k-1;
            count += i;
        }
        System.out.println(count);
    }

输出结果:2097130

计算1-1/2+1/3-1/4……..-1/99+1/100

设计思路:分数可以用除法来实现,正负号可以用(-1)的n次幂来实现

注意事项:要用浮点类型的数据来计算,因为需要用到小数部分相加减。记得用强制转换。

public static void main(String[] args) {
        int n = 1;
        float s = 0;
        int j = -1;
        while(n<=100){
            j = -j;
            float m = (float)1/n;//强制转换因为前
                         //面初始化的时候没用到浮点型
            s +=m;
            n++;
            System.out.println(m);
        }
        System.out.println(s);
    }

运行结果:5.187378

1加到10000去掉所有末位是3的数字

思路:循环中加入判断,该数字除以10取余数,余数等于3的时候,跳过循环。

public static void main(String[] args){
        int sum = 0;
        for(int i = 1; i <= 10000; i++){
            if(i % 10 == 3){
                continue;
            }
            sum = sum + i;
        }
        System.out.println(sum);
    }

输出结果:45007000

用*打印出一个金字塔

设计思路:
用两个for循环的嵌套,即可解决问题。
记得还要设计一个for循环打印空格。

public static void main(String[] args){
        int s = 0;
        System.out.print("需要几层金字塔:");
        Scanner scanner = new Scanner(System.in);
        s = scanner.nextInt();
        for(int x = 1; x <= s; x++){
            for(int z = 0; z <=s-x-1; z++){
                System.out.print("  ");
            }
            for(int y = 1; y <= 2*x-1; y++){
                System.out.print("* ");
            }
            System.out.println();
        }
    }

输出结果:这里写图片描述

用for循环打印一个九九乘法表

设计思路:和上面的程序差不多,不同的是小循环中的变量是乘法表单项的前一个数,大循环中的变量是乘法表单项的第二个数。最后连接字符串输出。

import java.util.Scanner;

//99乘法表
/*
 * 大循环中的变量是乘法表单项的前一个数,小循环中的变量是乘法表单项的第二个数
 * 
 * */
public class ChengFaBiao {
    public static void main(String[] args){
        int s = 0;
        System.out.print("输入需要到多少层的乘法表:");
        Scanner scanner = new Scanner(System.in);
        s = scanner.nextInt();
        for(int x = 1; x <= s; x++){
            for(int y = 1; y <= x; y++){
                System.out.print(y+"×"+x+"="+x*y+"\t");
            }
            System.out.println();
        }
    }
}

运行结果:
这里写图片描述

输出1000以内的水仙花数

水仙花数是指一个三位数,它的三个数位上的数的三次方的和等于它本身。
设计思路:将循环的数先对100求余数,得到百位的数字,然后除以10后对10求余数,得到十位数字,再对10求余数,的个位数字,将这三个数字的三次方加起来,再和本身比较即可。

public static void main(String[] args){
        int i = 0;
        for(i = 100;i<1000;i++){
            int bai = i/100;
            int shi = i/10%10;
            int ge = i%10;
            if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai){
                System.out.println("水仙花数是:"+i);
            }
        }
        for(int a = 1;a< 10;a++){
            for(int b = 0;b <10;b++){
                for(int c = 0;c <10;c++){
                    if(a*a*a+b*b*b+c*c*c == a*100+b*10+c){
                        System.out.println("水仙花数是:"+(a*100+b*10+c));
                    }
                }
            }
        }
//以上有两种求水仙花数的方法。

输出结果
这里写图片描述

找出2-100中所有的素数

思路:如何判断一个数是不是素数,判断它能否被除了1和本身的其他数整除即可

public static void main(String [] args){
        //初始化变量
        int i = 1;
        int count = 0;
        for(i = 1;i<=100;i++){
            int k = i-1;
            if(k == 0){
                continue;
            }
            else if(k == 1){
                System.out.print(i+" ");
                count++;
            }
            else{
                while(true){
                    k--;
                    if(k == 1){
                        System.out.print(i+" ");
                        count++;
                        break;
                    }
                    else if(i%k==0){
                        break;
                    }
                }
            }
        }
        System.out.println("\r\n素数个数为:"+count);
    }

输出结果:
这里写图片描述

斐波那契数列求和

设计思路:斐波那契数列就是 后一个数是前两个数的和 的数列,初始化三个变量然后循环相加就可以解决这个问题。

public static void main(String[] args){
        int sum1 = 1;
        int sum2 = 0;
        int sum = 0;
        for(int i = 1;i <= 20; i++){
            if(i==1){
                continue;
            }else{
                sum2 = sum1;
                sum1 = sum1+sum;
                sum = sum2;
                System.out.println(sum1);
            }
        }
    }

输出结果:6765

拓展:如果兔子生长三个月才能生兔子
那么规律会发生变化,一个数就成了它前一位的数和前三位的数相加之和。

public static void main(String[] args){
        int a = 1;
        int b = 0;
        int c = 0;
        int d = 0;

        for(int i = 1;i <= 20; i++){
            if(i==1){
                System.out.println("第"+i+"个月有"+a+"只");
                continue;
            }else if(i==2){
                b = a+1;
                System.out.println("第"+i+"个月有"+b+"只");
            }else if(i==3){
                c = b+1;
                System.out.println("第"+i+"个月有"+c+"只");      
            }else{
                d = a + c;
                a = b;
                b = c;
                c = d;
                System.out.println("第"+i+"个月有"+d+"只");
            }
        }
    }

输出结果:
这里写图片描述

完全数

一个数所有的因子之和等于它本身的就是一个完全数。

public static void main(String [] args){

        for(int x = 1; x < 1000; x++){
            int sum = 0;
            for(int y = 1; y<x; y++){
                if(x%y==0){
                    sum += y;
                }
            }
            if(sum == x){
                System.out.println(x);
            }
        }
    }

输出结果:
这里写图片描述

因式分解

思路:将输入的数字从2开始除,然后输出能除尽的最小的数字除过一次后,将那个数除以最小的因式,然后再从2开始除循环到某一次只能除到本身的时候,把所有的因式用乘号连接起来输出。

import java.util.Scanner;
public class LianXi02 {
    public static void main(String[] args){
        //初始化
        int s = 0;
        int i = 2;
        //系统输入
        Scanner sc = new Scanner(System.in);
        s = sc.nextInt();
        //循环
        while(i<=s){
            if(i==s){                       //跳出循环的方法,检测到除数和被除数相同
                System.out.print(s);
                break;
            }
            else if(s%i==0){                //能除尽,说明存在最小因式,输出这个因式,然后把它除去
                System.out.print(i+"*");
                s = s/i;
            }
            else{
                i++;                        //除数的递增,不能除尽,同时也小于被除数
            }


        }

    }
}

输出结果:
这里写图片描述

求两个数的最大公因数和最小公倍数

思路:
最大公约数:
把其中一个数从自身-1开始除,能除尽时,再去除另一个,当两个都能除尽时,输出最大公约数最小公倍数:把其中一个数从2开始除,能除尽时,再去除另一个,当两个都能除尽时,输出最小公倍数。

import java.util.*;
public class LianXi03 {
    public static void main(String[] args){
        int m;
        int n; //初始化
        Scanner sc1 = new Scanner(System.in);
        Scanner sc2 = new Scanner(System.in);//获取系统输入
        m = sc1.nextInt();
        n = sc2.nextInt();
        for(int a = m-1;a>0;a--){
            if(m%a==0){
                if(n%a==0){
                    System.out.println("最大公约数为:"+a);
                    break;
                }
            }
        }
        for(int b = 2; b < m; b++){
            if(m%b==0){
                if(n%b==0){
                    System.out.println("最小公倍数为:"+b);
                    break;
                }
            }
        }
    }
}

输出结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值