scala数组练习

1.有一个10个位置的数组,第一个位置放的是3,后面每个位置都是前面一个位置的两倍加1,打印这个数组,然后将数组中奇数位置和偶数位置互换

package com.sunyong

//有一个10个位置的数组,第一个位置放的是3,
// 后面每个位置都是前面一个位置的两倍加1,打印这个数组,
// 然后将数组中奇数位置和偶数位置呼唤
object arrOdds {
  def main(args: Array[String]): Unit = {
    val arr = new Array[Int](10)
    arr(0)=3
    //计算并打印
    for(i  <- 1 to arr.length-1) arr(i)=arr(i-1)*2+1
    arr.foreach(x=>print(x+" "))
    //奇偶位置互换
    for (i <- 0 to arr.length-1) {
      if ((i+1)%2 == 1) {
        var tmp = arr(i)
        arr(i) = arr(i+1)
        arr(i+1) = tmp
      }
    }
    println()
    arr.foreach(x=>print(x+" "))
  }
}

2.随机10个0到100之间的整数放入数组中,再将数组中的最大值和最小值去掉剩下的数放入新数组,数的顺序不能改变,打印数组

package com.sunyong

import scala.collection.mutable.ArrayBuffer

//随机10个0到100之间的整数放入数组中,再将数组中的最大值和最小值去掉
// 剩下的数放入新数组,数的顺序不能改变,打印数组
object shuzu2 {
  def main(args: Array[String]): Unit = {
    var arr = new ArrayBuffer[Int]
    //造数据
    for(i <- 1 to 10) arr.append((math.random*100).toInt)
    //打印
    arr.foreach(x=>print(x+" "))
    //删除
    arr.remove(arr.indexOf(arr.max))
    arr.remove(arr.indexOf(arr.min))
    //打印
    println()
    arr.foreach(x=>print(x+" "))
  }
}

3.输入一个整数,将这个整数的所有约数放入一个数组,打印数组

package com.sunyong

import scala.collection.mutable.ArrayBuffer
import scala.io.StdIn

//输入一个整数,将这个整数的所有约数放入一个数组,打印数组
object yueshu {
  def main(args: Array[String]): Unit = {
    println("请输入一个正整数:")
    val num = StdIn.readInt()
    val arr = new ArrayBuffer[Int]()
    if(num>0){
      for(i <- 1 to num){
        if (num%i==0) arr.append(i)
      }
      println("约数/因数如下:")
      arr.foreach(x=>print(x+" "))
    }else{
      println("输入的为负数!")
    }
  }

}

4.房间有100盏灯分别编号从1到100,默认为全部开着的,然后一个人进入房间,每个灯有百分之编号的概率被关闭,问最后还有哪些灯是开着的(概率使用随机数生成)

package com.sunyong
//房间有100盏灯分别编号从1到100,默认为全部开着的,然后一个人进入房间,
// 每个灯有百分之编号的概率被关闭,问最后还有哪些灯是开着的
object guandeng {
  def main(args: Array[String]): Unit = {
    // (i,j) i为编号1-100 j为灯状态0 1 1为开
    var arr = (1 to 100).toArray.map((_,1))
    var num=0.0
    //关灯操作,当随机数大于编号就置为0
    arr=arr.map(x=>{num=(math.random*100);if (num>x._1) (x._1,0) else x})
    //查看最后开着的灯有哪些
    println("有"+arr.filter(_._2==1).length+"盏灯开着,具体编号如下:")
    arr.filter(x=>x._2==1).foreach(x=>println(x._1))
  }
}

5.房间有100盏灯编号从1到100默认是关着的,房间外有100个人编号也从1到100,这100个人依次进入房间,若房间的灯的编号是人的编号的倍数,这个人就将灯的状态改变,问最后有哪些灯是开着的

package com.sunyong
//房间有100盏灯编号从1到100默认是关着的,房间外有100个人编号也从1到100,这100个人依次进入房间,
//若房间的灯的编号是人的编号的倍数,这个人就将灯的状态改变,问最后有哪些灯是开着的
object deng2 {
  def main(args: Array[String]): Unit = {
    //灯(i,j) i 1-100 j true或false
    var deng= (1 to 100).toArray.map(x=>(x,false))
    //人 1-100
    var ren = (1 to 100).toArray
    ren.foreach(x=>{for(y <- 0 to deng.length-1){ if(deng(y)._1%x==0) deng(y)=(deng(y)._1,!deng(y)._2) }})
    //灯的编号应该为所有能开方的数
    deng.filter(x=>x._2==true).foreach(println )
  }
}

6.将一些整数放入数组中,这些整数是:第一个整数是0-100之间的随机整数,第二个整数是0到第一个整数之间的随机数,第三个数是0到第二个整数之间的随机数…直到最后一个数字是0,打印这个数组

package com.sunyong

import scala.collection.mutable.{ArrayBuffer, ListBuffer}
//将一些整数放入数组中,这些整数是:第一个整数是0-100之间的随机整数,
//第二个整数是0到第一个整数之间的随机数,第三个数是0到第二个整数之间的随机数
// ...直到最后一个数字是0,打印这个数组
object shuzu6 {
  def main(args: Array[String]): Unit = {
    var arr = new ArrayBuffer[Int]
    arr.append((math.random*100).toInt)
    while(arr.last!=0){
      arr.append((math.random*arr.last).toInt)
    }
    arr.foreach(println)
  }
}

7.定义一个长度为10的字符数组,随机字符0-9 a-z A-Z 放入数组,打印数组

package com.sunyong
import scala.collection.mutable.ArrayBuffer
//定义一个长度为10的字符数组,随机字符0-9 a-z A-Z 放入数组,打印数组
object shuzu7 {
  def main(args: Array[String]): Unit = {
    val chars = new ArrayBuffer[Char]
    val num = ('0'.toInt to '9'.toInt).toArray.map(x=>x.toChar)
    val lower = ('a'.toInt to 'z'.toInt ).toArray.map(x=>x.toChar)
    val upper = ('A'.toInt to 'Z'.toInt ).toArray.map(x=>x.toChar)
    val char = num ++ lower ++ upper
    for (i<- 1 to  10){chars.append(char((math.random*char.length).toInt))}
    chars.foreach(println)
  }
}

8.约瑟夫环:100个人围成一个圈,从第一个开始报数,报1,2,3, 1,2,3 … 报数为3的人出去,一直不停的报数,直到剩下一个人,求这个人最开始的位置

package com.sunyong
//约瑟夫环:100个人围成一个环,从第一个开始报数,报1,2,3, 1,2,3 ...
//报数为3的人出去,一致不停的报数,直到剩下一个人,求这个人最开始的位置
//解题关键-->每轮下标余3的全部删除
object shuzu8 {
  def main(args: Array[String]): Unit = {
    // 1-100编号为这100个人
    var num = (1 to 100).toBuffer
    //余3成环最后会剩2个人
    while(num.length>2){
      //删除前数组长度
      var len = num.length
      println("原数组长度:"+len)
      num.foreach(x=>print(x+" "))
      //进行赋值准备过滤
      for (i <- 1 to num.length){
        if(i%3==0) {
          num(i-1)=999
        }
      }
      //过滤 删除
      num = num.filter(x=>x!=999)
      println()
      println("删除后长度:"+num.length)
      num.foreach(x=>print(x+" "))
      println()
      //成环
      num = num.drop(num.length-len%3)++num.dropRight(len%3)
      println("成环后")
      num.foreach(x=>print(x+" "))
      println()
    }
    //最后剩下两个人成环只会剩下第二个人
    num.drop(1).foreach(println)
  }
}

猜你喜欢

转载自blog.csdn.net/sun_0128/article/details/107546187