每天几个Java编程1:兔子问题&素数问题&水仙花数问题&分解质因数&条件运算符判断成绩&辗转相除法求最大公约数和最小公倍数&统计元素个数&Adder&完数&弹球问题

题目1:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

分析:简单的找规律,从第三个月开始,当前月份兔子数为前两个月兔子数之和。


public class TestRabbit {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int [] a = new int[20];
		int i;
		a[1]=a[2]=1;
		System.out.println("第1个月的兔子总数为:"+a[1]);
		System.out.println("第2个月的兔子总数为:"+a[2]);
		for(i=3;i<=12;i++){
			a[i]=a[i-1]+a[i-2];
			System.out.println("第"+i+"个月的兔子总数为:"+a[i]);
		}
	}

}

Result

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

分析:因为一个数的一半的平方大于其本身是从5开始的,解方程:n/2的平方>n .如果能被整除,则表明此数不是素数,反之是素数。


public class IsPrime {
	public static boolean Prime(int n){
		if(n==2){
			return true;
		}
		else{
			for(int i=2;i<n/2;i++){
				if(n%i==0){
					return false;
				}
			}
			return true;//记得要在全部循环结束后才可以确认为素数
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i;
		int count=0;
		for(i=101;i<=200;i++){
			if(Prime(i)){
				count++;
				System.out.print(i+" ");
			}
		}
		System.out.println();
		System.out.print("101-200之间的素数总数为:"+count);
	}

}

PRIME

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

分析:就是数位拆分啦。当然想到最简单的就是模除,从网上看利用函数进行拆分的这个,立刻学习了。


public class DaffodilNumber {
	public static boolean IsDaffodilNumber(int n){
		char[] ch=String.valueOf(n).toCharArray();//将int类型转换为String 将字符串转换为字符数组
		int cup=0;
		for(int i=0;i<ch.length;i++){
			cup=cup+(int)Math.pow(Integer.parseInt(String.valueOf(ch[i])),3);		
		}
		return(cup==n);		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=100;i<1000;i++){
			if(IsDaffodilNumber(i)){
				System.out.print(i+" ");
			}
		}

	}

}

result

题目4:将一个正整数分解质因数。例如:输入90,打印出90=233*5。

题目5:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

public class Score {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int score=0;
		System.out.print("学习成绩为:"+((score<60)?"C":(score<90)?"B":"A"));

	}
}

result

题目6:输入两个正整数m和n,求其最大公约数和最小公倍数。

分析:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。最小公倍数等于两数之积除以最大公约数


public class Gcd {
	public static int getGCD(int m,int n){//最大公约数辗转相除法
		if(m%n==0)return n;
		else return getGCD(n,m%n);
		
	}
	public static int getLCM(int m,int n){
		return m*n/getGCD(m,n);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int m=5,n=6;
		System.out.print("最大公约数为:"+getGCD(m,n));
		System.out.print("最小公倍数为:"+getLCM(m,n));
	}

}

题目7:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

分析:将字符串转换成字符数组,分析每一个字符是什么。利用java.lang.Character中的方法。

import java.util.Scanner;;
public class Sumup {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num=0,letter=0,blank=0,other=0;
		Scanner s=new Scanner(System.in);
		String result=s.nextLine();
		char x[]=result.toCharArray();
		for(int i=0;i<x.length;i++){
			if(Character.isDigit(x[i])){
				num++;
			}
			else if(Character.isLetter(x[i])){
				letter++;
			}
			else if(Character.isSpace(x[i])){
				blank++;
			}
			else
				other++;
		}
		System.out.println("数字的个数是:"+num);
		System.out.println("字母的个数是:"+letter);
		System.out.println("空格的个数是:"+blank);
		System.out.println("其他的个数是:"+other);
	}

}

result

题目8:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

分析:重点是看每次怎么加的。都是将原数乘以10再加上本身,循环次数判断好就可以了。

import java.util.Scanner;
public class Adder {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s=new Scanner(System.in);
		System.out.print("请输入1-9中的数字:");
		int num=s.nextInt();
		System.out.print("请数字的次数:");
		int times=s.nextInt();
		int number=num;
		int sum=0;
		for(int i=1;i<times;i++){
			num=number+num*10;
			sum=sum+num;
		}
		System.out.print("结果为"+(sum+number));
		
	}
}

result

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

分析:因子就是能整除这些数的数字。


public class PerfectNumber {
	public static boolean Fun(int n){
		int flag=0;
		for(int i=1;i<n;i++){
			if(n%i==0){
				flag+=i;
			}
		}
		return(n==flag);
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=1;i<=1000;i++){
			if(Fun(i)){
				System.out.print(i+" ");
			}
		}

	}

}

result

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

分析:利用递归非常简单


public class Ball {
	public static double Height(double height,int n){
		if(n==1)return height/2;
		else return Height(height/2,n-1);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print(Height(100,10));
	}

}

result
以上编译环境均为:MyEclipse 2016CI

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值