20190728 Java

第二题:从控制台输出如下结构:

package day04.homework;

public class HomeWork2 {
    public static void main(String[] args) {
        for(int i =1;i<=6;i++){ //外层控制行数,这里行数我从1开始
	    for(int j=1;j<=7-i;j++){ //内层控制列数,每行星星数为7-i
		System.out.print("*");
	    }
            System.out.println();//换到下一行,记得输出内容要为空!!!
	}
    }
}

    运行结果:

  • 个人小结:做打印图形的题型时,重点在于找规律!!!

第三题:判断101-200之间有多少个素数,并输出所有素数。

    程序分析:

    (1)素数是:只能被1或本身整除的数,如:3,5,7,11,131...

    (2)判断素数的方法:用一个数分别去除2到sqrt(这个数)

    (3)其实用这个数分别去除2到他本身少1的数也可以,但是运算时间增加了

    (4)如果能被整除,则表明此数不是素数,反之是素数

  • 方法一:用这个数分别去除2到该数的前一个数(它本身少1的数),虽然在时间效率上不是最佳,但比较容易理解
public class HomeWork3 {
    public static void main(String[] args) {
        int i,j;//定义i为要判断的数,变量j为除数(因数)
	int count =0;//定义count记录素数的个数
	System.out.println("101-200之间的素数有:");

	//方法1:用这个数分别去除2到它本身少1的数
	for(i=101;i<=200;i++){
			
	    for(j=2;j<i;j++){//除数从2开始,到该数的前一个数
	    //如果这个数除以某个数能够整除,那么它不是素数,直接跳出内层循环,继续判断下一个数
		if(i%j==0){
		    break;
		}
	    }
	    //做完上面的判断和遍历后,除数等于它本身了,那么它是素数
	    if(j==i){
		count++;//记录数加1
		System.out.print(i+" ");//这里我用空格隔开输出数
	    }	
	}
	System.out.println("\n"+"共有"+count+"个素数");
	
    }
}

    运行结果:

  • 方法二:除数范围缩小到该数的一半,加快时间效率

    分析:设 i 为非素数,那么它可以进行因数分解,即i=a*b*c……,例如i=26时,26=2*13。我们都知道2是最小的质数,所以i的 最小因数是2,那么最大的因数值就是i/2。换句话说就是,因数(即除数)的范围是2到i/2。比如根据本题判断150是不是素数,只需要让150除以2到75之间的数,不需要从2到149都除一遍。

public class HomeWork03 {
    public static void main(String[] args) {
	int i,j;//定义i为要判断的数,变量j为除数(因数)
	int count =0;//定义count记录素数的个数
	System.out.println("101-200之间的素数有:");
	//方法2:
	for(i=101;i<=200;i++){
		
	    for(j=2;j<i/2;j++){//除数范围从2开始,到i/2
	        //如果这个数除以某个数能够整除,那么它不是素数,跳出内层循环,判断下一个数
		if(i%j==0){
		    break;
		}
	    }
		
	    if(j>=i/2){
		count++;//记录数加1
		System.out.print(i+" ");//这里我用空格隔开输出数
	    }
	}
	System.out.println("\n"+"共有"+count+"个素数");
    }
}

    运行结果:


第四题:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方

  •    方法一:
public class HomeWork4 {
	public static void main(String[] args) {
		int i,j;
		System.out.println("所有的水仙花数为:");
		for(i =100;i<1000;i++){//三位数是100~999的范围
			int bai =i/100;  //得到百位
			int shi =i/10%10;//得到十位
			int ge  =i%10;   //得到个位
			
			int sum =bai*bai*bai+shi*shi*shi+ge*ge*ge;//得到各位数字立方和
			
			if(sum==i){//判断各位数字立方和是否等于该三位数
				System.out.print(i+" ");
			}

		}
		
	}
}
  •     方法二:使用Math类下的pow()方法

    用Math.pow(a,b)方法返回的是一个“a的b次方”的double类型值,具体可查阅JDK帮助文档。

public class HomeWork4 {
    public static void main(String[] args) {
	int i,j;
	System.out.println("所有的水仙花数为:");
	for(i =100;i<1000;i++){//三位数是100~999的范围
	    int bai =i/100;  //得到百位
	    int shi =i/10%10;//得到十位
	    int ge  =i%10;   //得到个位
	    //用Math.pow(a,b)方法返回一个“a的b次方”的double类型值
	    if(Math.pow(bai,3)+Math.pow(shi,3)+Math.pow(ge,3) == i){
		System.out.print(i+" ");
	    }
	}
		
    }
}

    两个方法的运行结果都是如下图:


第五题:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

    (2)如果n<>k(即n不等于k),但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。

    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

import java.util.Scanner;

public class HomeWork5 {
    public static void main(String[] args) {
	Scanner input = new Scanner(System.in);
	System.out.println("请输入一个要分解的正整数:");
	int n =input.nextInt();
	System.out.print(n+"=");
		
	for(int k=2;k<=n;k++){//先找到一个最小的质数k=2
			
	    while(n!=k && n%k==0){//如果n不等于k,且n能被k整除
		n=n/k; //作为新的正整数n
		System.out.print(k+"*");//输出质因数
	    }
			
	    if(n==k){//如果当前的n是一个质数,无法做上面的循环操作
		System.out.print(k);//直接跟在上一个质因数后面输出
		break;//直接跳出for循环
	    }
		
	}
		
    }

}

    运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值