第四阶段模块一

第一题、百元喝酒

作业要求:每瓶啤酒2元,3个空酒瓶或者5个瓶盖可换1瓶啤酒。100元最多可喝多少瓶啤酒?(不允许借啤酒)思路:利用递归算法,一次性买完,然后递归算出瓶盖和空瓶能换的啤酒数

package com.wangbr.homework
/**
  * @author: wangbr
  * @date: 2021-01-29 21:40
  * 作业要求:每瓶啤酒2元,3个空酒瓶或者5个瓶盖可换1瓶啤酒。100元最多可喝多少瓶啤酒?
  * (不允许借啤酒)思路:利用递归算法,一次性买完,然后递归算出瓶盖和空瓶能换的啤酒数
  */
object Demo1 {

  def main(args: Array[String]): Unit = {
    // 第一次买共几瓶
    var one:Int = 100/2;
    println(s"总喝瓶数:${one+process(0,one,one)}")
  }

  /*
   * 总数,上次剩余瓶子,上次剩余瓶盖
   */
  def process(sum:Int,bottle:Int,cap:Int):Int = {
    if(bottle<3 && cap<5) return sum
    var a1 = bottle/3
    var a2 = bottle%3
    var b1 = cap/5
    var b2 = cap%5
    println(f"总数=${a1+b1+sum} 上次剩余瓶子=${a1+b1+a2}%02d 上次剩余瓶盖=${a1+b1+b2}%02d")
    return process(a1+b1+sum,a1+b1+a2,a1+b1+b2)
  }

}

第二题、人机猜拳

作业需求

        1. 选取对战角色

        2. 开始对战,用户出拳,与对手进行比较,提示胜负信息

        3. 猜拳结束算分,平局都加一分,获胜加二分,失败不加分

        4 . 循环对战,当输入“n”时,终止对战,并显示对战结果

        5. 游戏结束后显示得分

package com.wangbr.homework
import scala.util.control.Breaks._
/**
  * @author: wangbr
  * @date:  2021-01-29 23:18
  *         人机猜拳
  * 1.1 作业需求
  *         1. 选取对战角色
  *         2. 开始对战,用户出拳,与对手进行比较,提示胜负信息
  *         3. 猜拳结束算分,平局都加一分,获胜加二分,失败不加分
  *         4. 循环对战,当输入“n”时,终止对战,并显示对战结果
  *         5. 游戏结束后显示得分
  */
object Demo2 {

  def main(args: Array[String]): Unit = {
    println("欢迎参加游戏")
    //1. 选取对战角色
    println("开始选取角色 孙悟空输入[1]  唐僧输入[2]")
    var role=scala.io.StdIn.readInt()
    while(role !=1 && role !=2){
      println("没有这个选项,请重新输入:")
      role=scala.io.StdIn.readInt()
    }
    println(s"您选择的是[${if(role==1)"孙悟空" else "唐僧"}]")
    println()
    //2. 开始对战,用户出拳,与对手进行比较,提示胜负信息
    println("游戏开始")
    println("游戏介绍:1.石头输入[1] 2.剪刀输入[2] 3.布输入[3] 4.退出输入[n]")
    var result = ""
    var score:Int = 0
    breakable{
      while(true){
        println("游请出拳")
        result = scala.io.StdIn.readLine()
        if(result != "1" && result != "2" && result != "3"){
          //4 . 循环对战,当输入“n”时,终止对战,并显示对战结果
          if(result == "n") break
          println("您输入错误!请重新输入")
        }else{
          //3. 猜拳结束算分,平局都加一分,获胜加二分,失败不加分
          var computer = scala.util.Random.nextInt(3)+1+""
          var sco = if(computer == result) 1 else {if((result.toInt-computer.toInt)==1||(result.toInt-computer.toInt)== -2 ) 0 else 2}
          println(s"你出的是[${if(result == "1")"石头"else if(result == "2")"剪刀" else "布"}]," +
            s"机器出的是[${if(computer == "1")"石头"else if(computer == "2")"剪刀" else "布"}]," +
            s"结果您是[${if(sco==2)"胜利" else if(sco == 1) "平局" else "失败"}]")
          score += sco
        }
      }
    }
    //5. 游戏结束后显示得分
    println(s"您的分数是[$score]")
    println("bye bye")
  }

}

第三题、用户位置时长统计

现有如下数据需要处理:

    字段:用户ID,位置ID,开始时间,停留时长(分钟)

4行样例数据:

     UserA,LocationA,8,60 UserA,LocationA,9,60 UserB,LocationB,10,60 UserB,LocationB,11,80 样例数据中的数据含义是:用户UserA,在LocationA位置,从8点开始,停留了60钟

 处理要求: 

    1、对同一个用户,在同一个位置,连续的多条记录进行合并

     2、合并原则:开始时间取最早时间,停留时长累计求和

package com.wangbr.homework

/**
  * @author: wangbr
  * @date: 2021-02-03 18:31
  */
case class UserInfo(userName:String,location:String,startTime:Int,duration:Int)
object LocationDemo {
  def main(args: Array[String]): Unit = {
    val userInfoList:List[UserInfo] = List(
      UserInfo("UserA", "LocationA", 8, 60),
      UserInfo("UserA", "LocationA", 9, 60),
      UserInfo("UserA", "LocationB", 10, 60),
      UserInfo("UserA", "LocationB", 11, 80)
    )


    val userMap = userInfoList.groupBy(t => t.userName+","+t.location)
    val orderByUserMap = userMap.mapValues(t =>t.sortBy(x=>x.startTime))

    var firstTime = 0

    val totalMap = orderByUserMap.mapValues(t =>{
      firstTime = t.head.startTime
      var sum = t.map(x=> x.duration).sum
      sum
    })
    totalMap.foreach{
      case (datas,sumTime)=>println(s"$datas,$firstTime,$sumTime")
    }
  }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这是多个问题,我会依次回答。 1. Linux内核的编译过程和方法: Linux内核的编译过程可以简单概括为以下几个步骤: 1)获取内核源代码; 2)配置内核; 3)编译内核; 4)安装内核。 获取内核源代码的方法可以通过下载官方发布的内核源代码或者使用Git从内核源代码仓库中获取,例如使用以下命令从Git仓库中获取最新的内核源代码: ``` $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git ``` 然后进入内核源代码目录,进行配置,可以使用以下命令进行配置: ``` $ make menuconfig ``` 该命令会打开一个菜单式的配置界面,用户可以在界面中选择需要的内核功能和驱动,也可以修改内核的一些编译选项。 配置完成后,使用以下命令进行编译: ``` $ make ``` 编译完成后,可以使用以下命令进行安装: ``` $ sudo make install ``` 2. Linux内核模块的编写方法: Linux内核模块是一种可以动态加载的内核扩展功能,内核模块的编写方法如下: 1)编写模块的源代码; 2)编写模块的Makefile文件; 3)编译模块; 4)加载模块。 其中,编写模块源代码的过程需要使用Linux内核提供的模块编程接口,可以使用C语言或者其他支持内核编程接口的编程语言进行编写。 编写Makefile文件的过程需要指定内核模块的编译选项和依赖关系,例如: ``` obj-m += my_module.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean ``` 编译模块的过程可以使用Makefile文件中指定的命令进行编译。 加载模块的过程可以使用以下命令进行: ``` $ sudo insmod my_module.ko ``` 3. Linux内核模块的加载、卸载方法: 加载模块的方法已经在上文中提到,即使用insmod命令进行加载。 卸载模块可以使用以下命令进行: ``` $ sudo rmmod my_module ``` 4. Boot Loader的工作过程: Boot Loader是一个引导程序,它的主要作用是加载操作系统内核,并将控制权交给内核,使得操作系统可以正常运行。Boot Loader的工作过程如下: 1)计算内核文件的位置和大小; 2)加载内核文件到内存中; 3)设置内核的启动参数; 4)跳转到内核的入口点。 在Linux系统中,常用的Boot Loader有GRUB和LILO。 5. U-Boot的第一阶段工作原理和程序: U-Boot是一种开源的Boot Loader,它的第一阶段工作原理和程序如下: 1)计算内核文件的位置和大小; 2)加载U-Boot的第二阶段程序到内存中; 3)跳转到U-Boot的第二阶段程序入口点。 U-Boot的第二阶段程序会进一步加载内核文件,并将控制权交给内核,使得操作系统可以正常运行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值