/**
     * 2012年培养学员25万人,每年增长25%。
     * 请问按此增长速度,到哪一年培训学员人数将达到100万人
     * 
     * 循环变量的初始化  2012
     * 循环条件  人数 < 100万
     * 循环操作  每年增长25%
     * 循环变量改变 年份改变
     */
  

  public static void main(String[] args) {
        int year = 2012;
        int num = 250000;
        while(num<1000000){
            num = (int)(num+num*0.25);
            year++;
        }
        System.out.println(year+"年的人数为"+num+"人,超过100万人");
    }

/**
     * 计算2000年的1月1到2008年的1月1日之间相隔有多少天。
     * (提示:平年有365天,润年有366天,循环从2000年到2008年结束)
     */

    public static void main(String[] args) {
       System.out.print("请输入开始年份:");
		Scanner sc_start = new Scanner(System.in);
		int start=sc_start.nextInt();
		System.out.print("请输入结束年份:");
		Scanner sc_end = new Scanner(System.in);
		int end=sc_end.nextInt();
		int sum=0;
		while(start<end){
			if((start%4==0&&start%100!=0)||start%400==0){//闰年的天数 
				sum=sum+366; 
		    }else{ 
		    	sum=sum+365; 
		    } 
			start++;
		}
		System.out.println(start+"年与"+end+"年之间间隔"+sum+"天");
    }

/**
     * 山上有一口缸可以装50升水,现在有15升水.老和尚叫小和尚下山挑水,
     * 每次可以挑5升.问:小和尚要挑几次水才可以把水缸挑满? 
     */

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int water = 15;
		int count = 0;
		while(water<50){
			water+=5;
			count++;
		}
		System.out.println("要挑"+count+"次能挑满");
		
	}

/**
     * 猴子摘了一堆枣N个,第一天吃了一半,还嫌不过瘾,又多吃了一个:
     * 第二天又吃了剩下的一半零一个:以后每天如此,
     * 到第十天,猴子一看只剩下一个了。问最初有多少个枣子?
     */

public static void main(String[] args) {
        int num = 1;	//第十天 1个
        int i = 9;		//第九天
        while(i>0){
        	num = (num+1)*2;
        	i--;
        }
        System.out.println("一共摘了"+num+"个桃子");
	}

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

       /**分析: 
		 * a.第一次落下 直到第10次落下 都是来回循环 
		 *   for(int i=2;i<=10;i++)    i=2代表球来回
		 * b.循环时,弹起来的高度 = 上一次落下的高度的一半
		 *   height = height/2		
		 * c.每次循环时经过的长度为高度的两倍 + 落下没弹回的部分
		 *   sum+=height*2;		sum总经过的长度
		 * d.最后总经过的高度  + 每次都没弹回的部分(100米)  
		 *   sum+100
		 * */
    public static void main(String[] args) {
		double sum = 0;		//总经过的长度
		double height = 100;	//最初的高度
		for(int i=2;i<=10;i++){
			height = height/2;		//弹起来的高度是落下高度的一半
			sum+=height*2;		//弹起的高度+落下的高度
		}
		System.out.println("总经过"+(sum+100)+"米");
		System.out.println("第10次反弹"+height+"米");
    }

/**海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只 猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?*/

    /*假设最后一份是每人1个   倒数第二份5*1+1  */
    public static void main(String[] args) {
		int tao = 1;		//假设最后每人都能分一个
		for(int i=1;i<=5;i++){
			tao = tao*5+1;			//第一次循环 倒数第二份  6个
		    System.out.println(tao);
		}
		System.out.println("一开始最少有"+tao+"个桃子");
    }

/**某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将 第一位和第四位交换,第二位和第三位交换。*/

    public static void main(String[] args) {        
        Scanner sc = new Scanner(System.in);
		System.out.print("请输入一个四位数的整数:");
		int num = sc.nextInt();
		//拆分四位整数
		int ge = num % 10;
		int shi = num/10%10;
		int bai = num/100%10;
		int qian = num/1000;
		//代替数字
		ge =(ge+5)%10;		
		shi =(shi+5)%10;
		bai =(bai+5)%10;
		qian =(qian+5)%10;
		//第一位跟第四位交换
		int temp;			//临时变量
		temp = qian;
		qian = ge;
		ge = temp;
		//第二位和第三位交换
		temp = bai;
		bai = shi;
		shi = temp;
		System.out.println("加密后的数字为"+qian+bai+shi+ge);
    }

/*某数学竞赛中,参赛人数大约在380~450人之间,比赛结果,全体考生的平均分为76分,女生的平均分为80.1分,男生的平均分为75,求男女生各有多少人?*/

        /* 假设男生为x人,女生为y人,
		 * 那么 男生的平均分*男生人数+女生的平均分*女生人数 = 总人数*总平均分
		 *      75*x + 80.1*y = (x+y)*76
		 *      75*x + 80.1*y = 76*x+76*y
		 *      		↓
		 *      	  x=4.1y    男生的人数是女生的4.1倍
		 *      因为总人数在380到450之间
		 *      	380<=x+y<=450
		 * */
    public static void main(String[] args) {
		for(int x=1;x<=450;x++){
			for(int y=1;y<=x/4.1;y++){
				if((75*x + 80.1*y)/(x+y)==76 && (x+y)>=380 && (x+y)<=450){
					System.out.println("男生人数:"+x+",女生人数:"+y);
				}
			}
		}
    }

/*ATM机的取款过程:
 *提示用户输入密码(password)最多只能输入三次,
 *超过3次则提示用户"密码错误,请取卡"结束交易。
 *如果用户密码正确,再提示用户输入取款金额(amount),
 *ATM机只能输出100元的纸币,取钱数要求最低100元,最高1000元。
 *若用户输入的金额符合上述要求,则打印输出用户取得钱数,
 *最后提示用户"交易完成,请取卡",否则提示用户重新输入金额。
 *假设用户密码是111111,请编程实现。*/

       public static void main(String[] args) {   
            Scanner sc = new Scanner(System.in);
			 //循环三次,检测密码是否正确
		    for(int i = 1;i < 4;i++){
		        //输入密码检测是否正确
		    	System.out.print("请输入您的取款密码:");
		    	int password = sc.nextInt();
		        //正确时,下一步
		    	if(password == 111111){
			        //提示输入金额
			    	System.out.print("请输入您的取款金额:");
			        double money = sc.nextDouble();
			        //检测金额是否在100-1000且 被100整除
			        if(money>=100 && money<=1000 && money%100==0){
			            //通过时,打印输入的金额
			            System.out.println("您已成功取款"+money+"元");
			            //打印完成后提示
			            System.out.println("交易完成,请取卡");
			            break;    
			        }else{
			            System.out.println("输入金额错误,请重新输入");
			            continue;
			        }
		    	}else if(i<3){
			        System.out.println("密码输入错误,请重新输入");
		        }else{
		        	System.out.println("密码错误,请取卡");
		        	break;
		        }
		    }
        }

/**假设某人有100,000现金.每经过一次路口需要进行一次交费. 交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000.请写一程序计算此人可以经过多少次这个路口*/

    public static void main(String[] args) {   
        double m = 100000;
	    int n = 0;
	    while(m > 5000){
	        if(m > 50000){
	            m = m -  (0.05 * m);
		    }else{
		        m = m - 5000;
		    }
	        n++;
	    }
	    System.out.println("总共会经过" + n + "次路口");*/
		
		/*int count = 0;
		for(int i=100000;i>=1;i--){
		    if(i>=50000){
		        i-=i*0.05;
		        count++;
		    }else if(i<=50000){
		        i-=5000;
		        count++;
		    }
		}
		 System.out.println("总共会经过" + count + "次路口");
    }

/**假设某员工今年的年薪是30000元,年薪的年增长率6%。编写一个Java应用程序计算该员工10年后的年薪,并统计未来10年(从今年算起)总收入。(知识点:循环语句for)*/

    public static void main(String[] args) {
        double sal=30000;
		double sumsal=0;
		int i = 1;	//年份
		while(i<=10){
			sal=sal*1.06;
			sumsal +=sal;
			i++;
		}
		System.out.println("10年后的年薪: "+sal);
		System.out.println("未来10年总收入: "+sumsal);
    }

/**有30人,可能包括男人、女人、小孩,他们在一饭店共消费50先令,其中每个男人花3先令,每个女人花2先令,每个小孩花1先令,求男人、女人、小孩各多少人?*/    

        public static void main(String[] args) {
            int man = 0;
			int woman = 0;
			int kids = 0;
			/* 
			 *  3*man+2*woman+kids=50;
			 *  man+woman+kids=30;
			 *  
			 *  2*man+woman=20;
			 */
			while(man<=10){
				woman = 20-2*man;
				kids = 30-man-woman;
				System.out.println("男人:"+man+
						"\t女人:"+woman+ 
						"\t小孩:"+kids);
				man++;
			}
        }

/** 幸运猜猜猜:游戏随机给出一个0~99(包括0和99)的数字,然后让你猜是什么数字。
   * 你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。
   * 经过几次猜测与提示后,最终推出答案。在游戏过程中,记录你最终猜对时所
   * 需要的次数,游戏结束后公布结果。猜测次数最多20次。
     提示:
     (1) 产生0~99之间的随机数字:
          int number = (int)(Math.random()*100)
     (2) 使用for循环结构,其中循环计数器counter同时也记录你猜测的次数*/

   	public static void main(String[] args) {         
            Random random = new Random();
	        int gameNum = random.nextInt(100);
	        int number = 0;
	        int count = 0;
	        do {
	        	if(count<=20){
		        	System.out.print("请猜一下电脑随机生成的数是:");
		        	number=sc.nextInt();
		        	if(number<gameNum){
		        		System.out.println("小了!");
		        	}else if (number>gameNum){
		        		System.out.println("大了!");
		        	}else{
		        		System.out.println("恭喜你猜了"+count+"次终于猜中了");
		        	}
		        	count++;
	        	}else{
	        		System.out.println("很抱歉,您的次数已用完");
	        	}
	        }while(true);
	   
	}

/**1.有一对幼兔,幼兔1个月后长成小兔,小兔1个月后长成成兔并生下一对幼兔,
        问8个月后有多少对兔子,幼兔、小兔、成兔对数分别是多少。*/

	   /*	幼兔	小兔	成兔        初始值
		*    1		  0      0         第一个月
		*    0		  1		 0         第二个月
		*    1		  0		 1	       第三个月		
		*    1		  1		 1	       第四个月
		*    2		  1		 2	       第五个月
		*    3        2		 3	       第六个月
		*    5		  3		 5		   第七个月
		*    8        5      8         第八个月
		*    13		  8      13		   第九个月
		*    
		*	当月的小兔数量 = 上月的幼兔数量
		*   当月的幼兔数量 = 上月的小兔数量+上月的成兔数量
		*   当月的成兔数量 = 上月的小兔数量+上月的成兔数量
		*/
    public static void main(String[] args) {
		int dxt = 0;
		int syt = 1;
		int dyt = 0;
		int sxt = 0;
		int dct = 0;
		int sct = 0;
		for(int i=1;i<9;i++){
			//当前月的兔子数量
			dyt = sxt+sct;
			dxt = syt;	
			dct = sxt+sct;	
			//当前月的兔子数量 转换为上月的
			sxt=dxt;
			syt=dyt;
			sct=dct;
		}
		System.out.println("8个月后的\n幼兔数量为:"+dyt+
				"\n小兔数量为:"+dxt+"\n成兔数量为:"+dct);
    }

/*从键盘上输入3个数,第一个代表要生成的随机数的个数, 第2个数是随机数区间的最小值,第3个数是随机数区间的最大值.  根据输入的数据,打印出对应的随机数.*/

   public static void main(String[] args) { 
        Scanner sc = new Scanner(System.in);
		System.out.println("请输入三个数字:");
		int a = sc.nextInt();		//要生成的随机数个数
		int b = sc.nextInt();		//随机区间的最小值
		int c = sc.nextInt();		//随机区间的最大值
		for(int i = 0;i<a;i++){
			if(c<b){	//区间的最大值必须大于最小值
				System.out.println("区间输入错误");
				break;
			}
			Random random = new Random();
			int num = random.nextInt(c-b+1)+b;
			System.out.println(num);
		}
    }

/**小芳的妈妈每天给她2.5元钱,她都会存起来,但是, 每当这一天是存钱的天数是5或5的倍数的话。她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。*/

    public static void main(String[] args) {
           double money = 0;
		   for(int i = 1;i<=100;i++){
			   money += 2.5;
			   if(i%5==0){
				   money-=6;
			   }
			   if(money>=100){
				   System.out.println("经过"+i+"天,小芳存到100块");
				   break;
			   }
		   }
    }

/**循环录入5个人的年龄,并计算平均年龄,如果录入的数据出现负数或者大于130的数,立即停止输出报错(无需打印平均年龄)*/

    public static void main(String[] args) {
		Scanner year = new Scanner(System.in);
		double y = 0;
		for (int i = 1; i <= 5; i++) {
			System.out.print("请输入年龄:");
			int i1 = year.nextInt();
			if (i1 > 0 && i1 < 130) {
				y = y + i1;
				if (i == 5) {
					System.out.println("5个人平均年龄是:" + y / 5);
				}
			} else {
				System.out.println("输出报错");
				break;
			}
		}
    }

/**给20块钱买可乐,每瓶可乐3块钱,喝完之后退瓶子可以换回1块钱,问最多可以喝到多少瓶可乐。*/

    public static void main(String[] args) {
        int total = 0;
		int money = 20;
		while(true){
			if(money<3){
				break;
			}else{
				money-=2;
				total++;
			}
		}
		System.out.println("可以喝到"+total+"瓶可乐");
    }

/*设有一长度为3000m的绳子,每天减去一半,问需几天时间,绳子的长度会短于5m*/

    public static void main(String[] args) {
        double height;
		int day;
		for(day=0, height=3000; height>=5.0; day++){
			height/=2;
		}
		System.out.println("需要"+day+"天");
    }

 /**"百钱买百鸡"是我国古代的著名数学题。题目描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多少只?*/

    public static void main(String[] args) {
        for(int a=0;a<33;a++) {//写一个for循环以计算公鸡数
			for(int b=0;b<=50;b++) {//写一个for循环以计算母鸡数
				int c=100-a-b;//计算小鸡的数量,
				if(c%3!=0) {
					continue;
				}//由于小鸡是1文钱可买三只,为防止小鸡数量不能被3整除,写出一个if语句跳过此次循环
				if(a*3+b*2+c/3.0==100) {//当公鸡、母鸡、小鸡的数量及所需钱数满足条件时,输出下面语句
					System.out.println("公鸡数"+a+"母鸡数"+b+"小鸡数"+c);
				}
			}
		}
	}

/**从键盘输入某个十进制整数数,转换成对应的二进制整数并输出。整数转二进制*/

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int num2 =sc.nextInt();
        //转换
        int num = num2;
        String str="";
        do{
            //除以2得到商
            int div = num/2;
            //得到余数作为二进制位
            int mod = num%2;
            str = mod + str;            
            //商作为被除数
            num = div;
        }while(num!=0);//被除数不是零        
        //输出二进制数
        System.out.println(num2+"------>"+str);      
	}

更多推荐

循环练习题