java基础(五)---循环练习题2

例1:【递归方法】计算两个非负整数 p 和 q 的最大公约数


	public static int gcd1(int p, int q){
		// 若q为0,则最大公约数为p
			
if(q == 0) {
		return p;
	}
	int r = p % q;
	return gcd1(q, r);
	
}

// 【辗转相除】 计算两个非负整数 p 和 q 的最大公约数
public static int gcd2(int p, int q){	
	if(q == 0) {
		return p;
	}
	while(p%q != 0){
		int r = p % q;
		p = q;
		q = r;
	}
	return q;
}

// 改进版【辗转相除】 计算两个非负整数 p 和 q 的最大公约数
public static int gcd3(int p, int q){	

	while(q != 0){
		int r = p % q;
		p = q;
		q = r;
	}
	return p;
}

// 计算两个非负整数 p 和 q 的最小公倍数
	public static int lcm(int p, int q){
		int p1 = p;
		int q1 = q;
	
		while(q != 0){
			int r = p % q;
			p = q;
			q = r;
		}
		return (p1*q1)/p;
	}

例2:请说出在main方法分别调用fun1 ,fun2,fun3的结果

public static void fun1()
	{
		int i = 2;
		switch(i)
		{
			case 1:
				System.out.print(1+"\t");
			case 2:
				System.out.print(2+"\t");
			case 3:
				System.out.print(3+"\t");
			default:
				System.out.println("总之不是 1 2 3");
		}
	}
	public static void fun2()
	{
		int i = 2;
		switch(i)
		{
			default:
				System.out.println("总之不是 1 2 3");
			case 1:
				System.out.print(1+"\t");
			case 2:
				System.out.print(2+"\t");
			case 3:
				System.out.print(3+"\t");
		}
	}
	
	public static void fun3()
	{
		int i = 56;
		switch(i)
		{
			default:
				System.out.println("总之不是 1 2 3");
			case 1:
				System.out.print(1+"\t");
			case 2:
				System.out.print(2+"\t");
			case 3:
				System.out.print(3+"\t");
		}
	}

:

例3:根据你输入的年和月算出该月有多少天

(闰年满足(能被400整除)或(能被4整除并且不能被100整除))

public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入年份:");
		int year = scanner.nextInt();
		System.out.print("请输入月份:");
		int month = scanner.nextInt();
		int day = 0;
		switch (month) {
		case 1:;case 3: ; case 5: ; case 7: ; case 8: ; case 10: ; case 12 : day = 31; break;
		case 4:;case 6: ; case 9: ; case 11: day = 30; break;
		case 2: day = year % 4 == 0 ? 29 : 28;
		default : break;
		}
		System.out.println(year + "年" + month + "月一共有" + day + "天");
		}

例4::输入年月日,判断这是该年的第几天

public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Scanner scanner = new Scanner(System.in);
		System.out.print("请输入年份:");
		int year = scanner.nextInt();
		System.out.print("请输入月份:");
		int month = scanner.nextInt();
		System.out.print("请输入日期:");
		int date = scanner.nextInt();
		
		int day=0;
		for (int i = 1; i < month; i++) {
			switch (i) {
			case 1:case 3:case 5:case 7:case 8:case 10:case 12:
				day = day +31;
				continue;
			case 4:case 6:case 9:case 11:
				day = day + 30;
				continue;
			}
		}
		if (year%4==0&&month>2) {
			day = day +29;
		}else if (month>2){
			day = day +28;
		}
		day = day + date;
		System.out.println("今天是"+year+"年的第"+day+"天");

	}

例5: 敲7:打印出1到200之间所有应敲的数

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入范围的上限");
		int n = sc.nextInt(); 
		System.out.println("请输入范围的下限");
		int m = sc.nextInt(); // 获取控制台输入的数字
		
		SevenKnock(m,n);
	}

	public static void SevenKnock(int m,int n) {
		for (int i = m; i <= n; i++) { // 遍历m-n以内的所有整数
		if (i % 7 == 0 || hasSeven(i)) { // 如果能被7整除或者含有7这个数字就打印出来
		System.out.println(i);
		}
		}
	}
	public static boolean hasSeven(int i) {
		String s = String.valueOf(i);
		if (s.contains("7")) {
			return true;
		}
		return false;
	}



	for (int i = m; i <= n; i++) { // 遍历m-n以内的所有整数
		if (i % 7 == 0 || hasSeven(i)) { // 如果能被7整除或者含有7这个数字就打印出来
		System.out.println(i);
		}
		}
	}
	public static boolean hasSeven(int i) {
		String s = String.valueOf(i);
		if (s.contains("7")) {
			return true;
		}
		return false;
	}

例6: 猴子吃桃子问题:猴子第一天摘下若干套子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃了一个,以后每天都吃前一天剩下的一半多一个。到第10天的时候再想吃桃子时,只剩下一个套子。求第一天摘了多少个套子。

代码如下:

//  前一天的桃子的数目时后一天桃子的数目+1 再乘2 也就是第10天是1个 第9天则是:(1+1)*2个

public static void main(String[] args) {  
    int n =1 ;        
    int day = 10;     
    while(day>1){     
        n=(n+1)*2;    
        day--;        
    }     
    System.out.println("吃了"+n+"个");  
}

结果为:1534

例7:有1020个西瓜,第一天卖掉总数的一半后又多卖掉两个,以后每天卖剩下的一半多两个,问几天可以卖完。

         注:我们需要一个变量来标记天数。

public static void main(String[] args) {   
int n = 1020;      
int day=0;     
do{          
n=n-n/2-2;     
day++;      
}while (n>0);     
System.out.println(day);  
}

结果是 8

例8:兔生兔问题,我们规定一对兔子从出生后第三个月开始可以生一队兔子。假如一年内没有发生死亡,设一年后(12个月)能繁殖为多少对?

分析:斐波那契数列。

1,1,2,3,5,8,13,21,…

public static void main(String[] args) {     
int a=1;       
int b=1;       
int temp;      
for(int i=2;i<12;i++){      
temp = b;         
b=a+b;         
a=temp;      
}       
System.out.println(b); 
}

结果为:144

例9:计算1+2-3+4-5+6-7+…+100的值

public static void main(String[] args) {      
int sum=1;     
for(int i = 2;i<=100;i++){      
if(i%2==0){            
sum+=i;          
}else {          
sum-=i;          
}       
}       
System.out.println(sum);   
}

结果为 52

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值