使用scala练习Java经典习题之循环

1.兔子生孩子

package com.sunyong
/*
*一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生
* 一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)
* 能繁殖成多少对?  分析:兔子的规律为数列,1,1,2,3,5,8,13,21
* /
//兔子生孩子-->斐波那契数列,前两者和等于第三者
object Tuzi {
  def main(args: Array[String]): Unit = {
    //斐波那契数列,前两者和等于第三者 ai=ai-1 + ai-2
    val rubbit: Array[Int] = new Array[Int](12)
    rubbit(0) = 1
    rubbit(1) = 1
    var i: Int = 2
    while (i<=rubbit.length-1){
    rubbit(i)=rubbit(i-1)+rubbit(i-2)
      i += 1
  }
    println("12个月后几对兔子:"+rubbit(11))
    for(s<-rubbit) {
    println(s)
    }
  }
}

2.求101-200素数个数

package com.sunyong
import util.control.Breaks._
// 101-200的素数个数并输出
object Su {
  def main(args: Array[String]): Unit = {
    var count=0 //定义个数
    for (i:Int<- 101 to 200) {
      breakable(
      for(j:Int<- 2 to i-1){
        if(i%j==0){ //可整除不是素数,跳出出循环
          break()
        }else{
          if(j==i-1){ //是素数输出个数+1
            count+=1
            print(i+" ")
          }
        }
      })
    }
    println()
    println("共有"+count+"个")
  }
}

3.水仙花数

package com.sunyong
//三位数水仙花数:位数三次幂和等于本身
object Shuixiahua {
  def main(args: Array[String]): Unit = {
    for (i:Int <-100 to 999){
      var ge = i%10
      val shi = i%100/10
      val bai = i/100
      if (i==(ge*ge*ge+shi*shi*shi+bai*bai*bai))
        println(i)
    }
  }
}

4.正整数分解质因数

package com.sunyong
import  scala.io.StdIn
//分解质因数 如90=1*2*3*3*5
object Fenjie {
  def main(args: Array[String]): Unit = {
    println("请输入一个整数:")
    var num =StdIn.readInt()
    if (num > 1) {
      var n = 2 // 定义一个最小的质数,直接从2开始
      print(num + "=1*")
      while (num != n) { // 如果能被整除,就打印出n这个质数
        if (num % n == 0) {
         print(n + "*")
          num /= n // 继续让num作为新的数继续除以n
        }
        else n+= 1 // 如果不能被整除,最小质数+1
      }
      // 如果一个质数刚好等于输入的这个数
      print(n) //到最后n=num时在输出n
    }
  }
}

5.求最大公约数和最小公倍数

package com.sunyong

import scala.io.StdIn

//求最大公约数和最小公倍数
//在循环中只要除数不等于0,用较大数除以较小的数
//小的数作为下一轮大的数,余数作为小的数
//返回最后较大数位最大公约数
//最小公倍数为两数积/最大公约数
object Gongyuebei {
  def main(args: Array[String]): Unit = {
    println("请输入一个整数:")
    var m =StdIn.readInt()
    println("请输入另一个整数:")
    var n= StdIn.readInt()
    val s1 = n //保存变量值
    val s2 = m //保存变量值
    while(m!=0){ //条件
      var a =n%m //取余
      n=m //较大=较小
      m=a //较小=较大/较小取余
    }
    println("最大公约数:"+n) //最大公约数
    println("最小公倍数:"+s1*s2/n) //最小公倍数
  }
}

6.求1000内完数

package com.sunyong
//完数:本身=所有因子之和如6=1+2+3 找出1000内完数
object Wanshu {
  def main(args: Array[String]): Unit = {
    for(i<-1 until 1000){
      var number =0
      for(a <- 1 until i){
        if(i%a==0){ //a是因子
          number+=a //因子相加
        }
      }
      if (number==i){ //判断是否完数
        println(i+"是完数")
      }
    }
  }
}

7.猴子吃桃问题

package com.sunyong
/**
  * 猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,
  * 又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
  */
object MonkeyPeach {
  def main(args: Array[String]): Unit = {
     var surplus:Int =1
     var sum = 0
    for (day <- 10 until 1 by -1){ //逆向思维
      surplus = 2*surplus+2;
    }
    println("第一天的桃子数量:"+surplus)
  }
}

8.企业奖金问题

package com.sunyong
import scala.io.StdIn
/*
*题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,
* 低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;
* 40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,
* 超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
* 程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
*/
object Lirun {
  def main(args: Array[String]): Unit = {
    var prize = 0
    println("输入利润:")
    var money = StdIn.readInt()
    if(money<=100000) prize = money/10
    else if (money <= 200000&&money > 100000) {
      prize = 10000 + (money - 100000) * 75 / 1000
    }
    else if (money <= 400000 && money > 200000) prize = 10000 + 100000 / 75 / 1000 + (money - 200000) * 5 / 100
    else if (money <= 600000 && money > 400000) prize = 10000 + 100000 / 75 / 1000 + 200000 * 5 / 100 + (money - 400000) * 3 / 100
    else if (money <= 1000000 && money > 600000) prize = 10000 + 100000 / 75 / 1000 + 200000 * 5 / 100 + 200000 * 3 / 100 + (money - 600000) * 15 / 1000
    else prize =10000 + 100000 / 75 / 1000 + 200000 * 5 / 100 + 200000 * 3 / 100 + 400000 * 15 / 1000 + (money - 1000000) / 100
    println("应发奖金数:"+prize+"元")
  }
}

9."1234"这4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

package com.sunyong

/*
* 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
* 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
* 组成所有的排列后再去 掉不满足条件的排列。
*/
object Zushu {
//Java实现
  def main(args: Array[String]): Unit = {
    //满排列问题4*3*2=24
    var s = ""
    var count = 0
    for(i<-1 to 4){
      for(j<-1 to 4){
        for(k<-1 to 4){
          if(i!=j && j!=k && i!=k){
            count+=1
            print(s + i + j + k + "\t")
          }
        }
      }
    }
    println()
    println("共有:"+count+"种组合")
  }
  // scala函数做法
   def a()={
    var y = 0
    (1 to 4).toArray.permutations.map(x=>(x.dropRight(1))).map(x=>(x,1)).foreach(x=>{println(x._1.mkString(""));y=y+1})
    println("共有"+y+"种方式")
  }
}

10.判断某年某月某日是这一年的第几天

package com.sunyong
import java.util._
//判断今天是这一年的第几天
object CountDay {
  def main(args: Array[String]): Unit = {
    var c = Calendar.getInstance()
    //设置时间可为年月日(注意月份是0-11)
//    c.set(2019,11,31)
    c.setTime(new Date())
    println(c.get(Calendar.DAY_OF_YEAR))
  }
}

11.求第五人岁数

//第一个人10岁此后每个人大两岁
package com.sunyong
//五人岁数
object Age {
  def main(args: Array[String]): Unit = {
    var a1=10
    for (i:Int <- 1 to 4){
      a1+=2
    }
    println(a1)
  }
}

12.任意输入一个整数(小于10位),输出它一共有多少位。

package com.sunyong
//判断整数的位数
import scala.io.StdIn

object Numweishu {
  def main(args: Array[String]): Unit = {
    println("请输入一个整数:")
    var num = StdIn.readInt()
    println(num.toString.length)
  }
}

13.计算1000以内所有不能被7整除的整数之和

package com.sunyong
//计算1000以内所有不能被7整除的整数之和
object num7 {
  def main(args: Array[String]): Unit = {
    var sum = 0
    for(i <- 1 to 1000){
      if(i%7!=0){
        sum+=i
      }
    }
    println ("1000以内所有不能被7整除的和:" + sum)
  }
}

14.计算 1+2-3+4-5+6-7…+100的结果//注意审题

package com.sunyong

object _100 {
  def main(args: Array[String]): Unit = {
    var sum = 1
    for(i <- 2 to 100){
      if(i%2==0){
        sum+=i
      }else{
        sum-=i
      }
    }
    println("总和是:" + sum)

  }
}

15.一张纸的厚度大约是0.08mm,对折多少次之后能达到或超过珠穆朗玛峰的高度(8848.13米)

package com.sunyong

object mountain {
  def main(args: Array[String]): Unit = {
    var paper = 0.00008
    var num=0
    while(paper<8848.13){
      num+=1
      paper*=2
    }
    println("经过对折"+num+"次能达到")
  }
}

16.从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 54321

package com

import scala.io.StdIn

object jiechen {
  def main(args: Array[String]): Unit = {
  // 输入数字不要超过25
    println("输入一个正整数:")
    var num = StdIn.readLong()
    val n = num
    var count = num
    while (count>1){
      num*=(count-1)
      count-=1
    }
    println(n+"的阶乘:"+num)
  }
}

17.你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数

package com

import scala.io.StdIn
import scala.util.control.Breaks._

object OddsNum {
  def main(args: Array[String]): Unit = {
    var num = 0
    var countOdd = 0
    var countEven = 0
    println("输入正整数,输入-1结束:")
    breakable(
    do{
      num = StdIn.readInt()
      if(num == -1){
        println("输入结束")
        println("奇数个数:"+(countOdd)+"偶数个数:"+countEven)
        break()
      }else if(num<0)
       {println("输入必须为正整数,重新输入:")
      }else{
        if(num%2==0){
          countEven+=1
        }else{
          countOdd+=1
        }
      }
    }while((num != -1)))
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值