【大数据开发】scala集合练习题

  1. 设计方法,计算斐波那契数列指定位的数字(递归)

    object HomeWork1 {
    
        def main(args: Array[String]): Unit = {
            for (num <- 0 until 50){
                println(fib(num))
            }
        }
    
        def fib(num:Long): Long ={
            if (num==0)
                0
            else if (num==1)
                1
            else
                fib(num-1)+fib(num-2)
        }
    }
    
  2. 设计方法,计算一个数字的二进制原码

    1. 基础版:直接计算出原码即可,不用考虑正负数,不用考虑补位

    2. 进阶版:不够8位,补齐8位;不够16位,补齐16位;不够32位,补齐32位;不够64位,补齐64位。最大考虑到64位即可。

    3. 进阶版2:考虑负数的情况

    package day02
    //进阶版
    import scala.collection.mutable.ArrayBuffer
    
    /**
     * 设计方法,计算一个数字的二进制原码
     *
     * 1. 基础版:直接计算出原码即可,不用考虑正负数,不用考虑补位
     *
     * 2. 进阶版:不够8位,补齐8位;不够16位,补齐16位;不够32位,补齐32位;不够64位,补齐64位。最大考虑到64位即可。
     *
     * 3. 进阶版2:考虑负数的情况
     *
     */
    
    object HomeWork2 {
        def main(args: Array[String]): Unit = {
            func(-1)
        }
        def func(n:Long): Unit ={
            val ab = new ArrayBuffer[Long]()
            var num = 0L
            var flag=false
            if (n<0)
                num = -n
            else
                num = n
    
            while (num != 0){
                val remainder = num%2
                ab.append(remainder)
                num = num/2
            }
    
            if (n<0) {
                print("1")
                flag=true
            }else
                flag=false
            outPut(ab,flag)
        }
    
        def outPut(ab: ArrayBuffer[Long],flag:Boolean): Unit ={
            var len=ab.length
            var n1=0
            var n2=0
            var n3=0
            var n4=0
            //是正数
            if (!flag) {
                n1=8
                n2=16
                n3=32
                n4=64
            }
            else {
                n1=7
                n2=15
                n3=31
                n4=63
            }
    
            if (ab.length<n1){
                while (len<n1) {
                    print("0")
                    len+=1
                }
            }else if(ab.length<n2){
                while (len<n2) {
                    print("0")
                    len+=1
                }
            }else if(ab.length<n3){
                while (len<n3) {
                    print("0")
                    len+=1
                }
            }else if(ab.length<n4){
                while (len<n4) {
                    print("0")
                    len+=1
                }
            }
            println(ab.mkString.reverse)
        }
    
    }
    
  3. 设计一个方法,对一个数组进行升序排序(自己写排序算法)

    package day02
    
    /**
     * 3.设计一个方法,对一个数组进行升序排序(自己写排序算法)
     */
    object HomeWork3 {
        def main(args: Array[String]): Unit = {
            val arr = Array[Int](10,8,7,12,6)
            quickSort(arr,0,arr.length-1)
            println(arr.mkString(","))
        }
        def quickSort(arr: Array[Int],begin:Int,end:Int):Unit = {
            if (begin<end){
                val temp = arr(begin)
                var i = begin
                var j = end
    
                while(i<j){
                    while(i<j && arr(j)>temp) {
                        j-=1
                    }
                    arr(i) = arr(j)
    
                    while(i<j && arr(i)<=temp) {
                        i+=1
                    }
                    arr(j) = arr(i)
                }
                arr(i) = temp
                quickSort(arr,begin,i-1)
                quickSort(arr,i+1,end)
            }
        }
    }
    
    
  4. 从控制台输入一个字符串,统计每一个字符出现的次数

    例如:
    输入: helloworld
    输出: h(1)e(1)l(3)o(2)w(1)r(1)d(1)
    
    
    package day02
    
    import scala.collection.mutable
    import scala.collection.mutable.ArrayBuffer
    import scala.reflect.io.NoAbstractFile.toCharArray
    
    /**
     * 4. 从控制台输入一个字符串,统计每一个字符出现的次数
     * 例如:
     * 输入: helloworld
     * 输出: h(1)e(1)l(3)o(2)w(1)r(1)d(1)
     */
    object HomeWork4 {
    
        def main(args: Array[String]): Unit = {
            wordCount("hello world")
    
        }
    
        def wordCount(str: String): Unit = {
            val ch = str.toCharArray
            val map: mutable.Map[Char, Int] = mutable.Map()
    
            for (i <- 0 until ch.length){
                if (map.contains(ch(i))) {
                    map(ch(i))=map.getOrElse(ch(i),0)+1
                }
                else
                    map(ch(i))=1
            }
    
            for((k,v) <- map){
                print(k+"(" + v + ")")
            }
    
    
        }
    
    }
    
  5. 随机生成10个不重复的[50, 100]范围的数字,存入一个可变数组中

package day02

import scala.collection.mutable.ArrayBuffer
import scala.util.Random

/**
 * 5. 随机生成10个不重复的[50, 100]范围的数字,存入一个可变数组中
 */
object HomeWork5 {
    def main(args: Array[String]): Unit = {

        val ab = ArrayBuffer[Int]()

        val random = new Random()
        var time = 10
        do{
            val num = random.nextInt(51)+50
            if (!ab.contains(num)) {
                ab.append(num)
            }
            time -= 1
        }while(time>0)

        print(ab.mkString(","))
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值