scala小练习三

本文提供了一系列Scala编程练习,包括编写values函数以输出区间内的函数映射结果,将程序转化为高阶函数形式,实现correspond方法验证字符串数组长度一致性,探讨闭包概念中的非局部变量,解决货币兑换问题,计算斐波那契数列,以及理解部分应用函数partial的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键代码+运行截图

1.编写函数values(fun(Int)=>Int, low:Int,high: Int)该函数输出一个集合,对应给定区间
内给定函数的输入和输出。比如values(x=>x*x,-5,5) 应该产生集合(-5,25) (-4,16) ….

def values(fun:(Int)=>Int,low:Int,high:Int):List[(Int,Int)]={
    var col=List[(Int,Int)]()
    for(a <-low to high){
      col=(a,fun(a))::col
    }
    return col
  }

这里写图片描述

2.读下图的程序,将其改为高阶函数的形式 。

def formatAbs(func:(Int)=>Int,a:Int)={
    val msg="The absolute value of %d is %d"
    func(a)
  }
  def main(args: Array[String]): Unit = {
    println(formatAbs((n:Int)=>if(n<0) -n else n,-42))
  }

这里写图片描述

3.用correspond方法让我们判断某个字符串数组里面所有元素的长度是否和某个给定的整数数
组一致。

def main(args: Array[String]): Unit = {
    val a=Array("aa","bb","cc")
    val b=Array(2,2,2)
    val c=Array(1,2,3)
    println(a.corresponds(b)(_.length==_))
    println(a.corresponds(c)(_.length==_))
  }

这里写图片描述

4.def getGreetingFunc(msg: String) = (name: String) => println(msg + “,” + name)
在这个表达式中,根据闭包的定义,找出非局部变量。
msg
5.假设某国的货币有若干面值,现给一张大面值的货币要兑换成零钱,问有多少种兑换方式。

def changmmoney(money:Int,change:List[Int]): Int ={
    if(0==money) return 1//完成一种换法
    if(money<0||change.size==0) return 0//该种换法没有成功
    changmmoney(money,change.tail)+changmmoney(money-change.head,change)
    //前者为按面值种类递归,每次删掉一种面值,求只用其余面值能得到的换法数量
    //后者为开始兑换,每次都用一种面值进行兑换,能将money减为0的返回1
    //单独看后者递归,都是用同一种面值进行减法,但与前者相结合,所有递归下来就变成了每种面值都尝试过
  }
  def main(args: Array[String]): Unit = {
    println(changmmoney(10,List(5,10)))
    println(changmmoney(10,List(1,2,5,10)))
  }

这里写图片描述

6.写一个递归函数,来获取第n个斐波那契数,前两个斐波那契数0 和 1,第n个数总是等于前
两个数的和——序列开始为0,1,1,2,3,5

def fib(n:Int,a:Int,b:Int): Int ={
    if(n==1) return a
    fib(n-1,b,a+b)
  }
  def main(args: Array[String]): Unit = {
    println(fib(6,0,1))
  }

这里写图片描述

7.def partial[A,B,C](a: A, f:(A,B) => C): B => C = (b: B) =>?
函数partial 有三个类型参数A,B,C 它带有两个参数,参数f本身是一个有两个参数返回值为C的
函数,函数partial返回值类型也是函数,类型为B=>C

def partial[A,B,C](a:A, f:(A,B) => C):B=>C=(b:B)=>{
    b[C]//匿名函数,参数是B类型,返回C类型
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值