Scala函数式编程实战(上)

简介: Scala函数式编程实战

一:第1章 Scala基础编程

1-1 h0001.Hello World!

本题要求编写程序,输出一个短句“Hello World!”。


输入格式:

本题目没有输入。


输出格式:

在一行中输出短句“Hello World!”。


输入样例:


输出样例:

Hello World!


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
    printf("Hello World!");
  }
}


1-2 输出所有的水仙花数

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

输入格式:


输出格式:

153是一个水仙花数
370是一个水仙花数
371是一个水仙花数
407是一个水仙花数


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
    println("153是一个水仙花数")
    println("370是一个水仙花数")
    println("371是一个水仙花数")
    println("407是一个水仙花数")
  }
}


1-3 统计给定的 n 个整数中正数和负数的个数

统计给定的 n 个整数中正数和负数的个数


输入格式:

接收给定的多行数据(例:4 \n 56 \n 5 \n -10 \n 10,其中第一个数代表 n,其余数代表具体值,\n 仅用来说明前一个数与另一个数之间是换行,实际数据中并没有)。

输出格式:

统计正数和负数的个数(注意第一个数无需统计)。


输入样例:

4
56
5
-10
10


输出样例:

正数个数:3
负数个数:1


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var n = StdIn.readInt();
      var i = 0;
      var a = 0;
      var b = 0;
      while(i < n)
      {
          i += 1;
          var x = StdIn.readInt();
          if(x > 0) a += 1;
          else if(x < 0) b += 1;
      }
      println("正数个数:"+a);
      println("负数个数:"+b);
  }
}


1-4 计算除第一个数之外的所有非负整数之和

输入样例:

4
56
5
-10
10


输出样例:

71


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var n = StdIn.readInt();
      var i = 0;
      var sum = 0;
      while(i < n)
      {
          i += 1;
          var x = StdIn.readInt();
          if(x > 0) sum += x;
      }
      println(sum);
  }
}


1-5 求差值

给定的 n 个整数中,计算每个x的平方根,然后再对该值求平方。现在,这个结果与x相差多少?


输入格式:

接收给定的多行数据(例:2 \n 5 \n 10,其中第一个数代表 n,其余数代表具体值,\n 仅用来说明前一个数与另一个数之间是换行,实际数据中并没有)。

输出格式:

对每一组输入,在一行中输出差的值。


输入样例:

2
3
5


输出样例:

4.440892098500626E-16
-8.881784197001252E-16


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var n = StdIn.readInt();
      var i = 0;
      while(i < n)
      {
          i += 1;
          var x = StdIn.readDouble();
          var x1 = scala.math.sqrt(x);
          var x2 = scala.math.pow(x1,2);
          println(x - x2);
      }
  }
}


二:第2章 控制结构和函数

2-1 分段函数

一个数字如果为正数,则它的signum为1;如果是负数,则signum为-1;如果为0,则signum为0.编写一个函数来计算这个值


输入格式:

在一行中给出1个绝对值不超过1000的整数x。

输出格式:

对每一个输入,在一行中输出这个数的signum。


输入样例:

-299


输出样例:

-1


import scala.io.StdIn
object Main {
    def f(x : Int) =
    {
        if(x > 0) 1
        else if(x == 0) 0
        else -1
    }
  def main(args: Array[String]): Unit = {
      var n = StdIn.readInt();
      print(f(n))
  }
}


2-2 字符串的乘积

编写一个for循环,计算字符串中所有字母的Unicode代码(toLong方法)的乘积。


输入格式:

在一行中给出1个长度不超过100的字符串。

输出格式:

在一行中输出字符串的乘积。


输入样例:

Hello


输出样例:

9415087488


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var sum:Long = 1;
      var s = StdIn.readLine();
      for(c <- s)
      {
          var x = c.toLong;
          sum = sum * x;
      }
      println(sum);
  }
}


2-3 求和中断

n以内的数求和,求出当和第一次大于m的当前数是多少?


输入格式:

输入在2行中分别给出2个不超过1000的正整数n和m。

输出格式:

对每一组输入,在一行中输出当和第一次大于m的当前数。


输入样例:

100
20


输出样例:

6


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var n = StdIn.readInt();
      var m = StdIn.readInt();
      var sum = 0;
      var t = 0;
      for(i <- 1 to n )
      {
          sum += i;
          if(sum > m && t == 0)
          {
              print(i);
              t = 1;
          }
      }
  }
}


2-4 求平均分

统计n个班成绩情况,每个班有m名同学,求出各个班的平均分和所有班级的平均分。


输入格式:

分别输入2个不超过10的正整数n和m,然后输入n*m个实数表示n个班m个学生的成绩。

输出格式:

对每一组输入,分别输出各个班的平均分和所有班级的平均分。


输入样例:

3
5
78
65
56
99
45
68
65
86
69
49
88
75
96
89
65


输出样例:

第1个班的平均成绩是68.60
第2个班的平均成绩是67.40
第3个班的平均成绩是82.60
所有平均成绩是72.87


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var n = StdIn.readInt();
      var m = StdIn.readInt();
      var ans = 0.0;
      for(i <- 1 to n)
      {
          var sum = 0.0;
          for(j <- 1 to m)
          {
              var x = StdIn.readDouble();
              sum += x;
          }
          printf("第%d个班的平均成绩是%.2f\n",i,sum/m);
          ans += sum;
      }
      printf("所有平均成绩是%.2f",ans/n/m);
  }
}


2-5 栗子和虫子

你买了一箱n个栗子,很不幸的是买完时箱子里混进了一条虫子。虫子每a小时能吃掉一个栗子,假设虫子在吃完一个栗子之前不会吃另一个,那么经过b小时你还有多少个完整的栗子?。


输入格式:

输入仅一行,包括n,a和b(均为整数)。

输出格式:

输出也仅一行,剩下的苹果个数。


输入样例:

10 4 7


输出样例:

8


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var line = StdIn.readLine().split(" ");
      var k = 0
      var a = line(0).toInt;
      var b = line(1).toInt;
      var c = line(2).toInt;
      var x = c / b;
      if(c % b != 0) x += 1;
      if(x < a) print(a - x)
      else print(0)
  }
}


2-6 动物

给定你三个葡萄牙语单词,这些词将根据下表从左到右定义一个动物。

请你确定并输出这个动物的名称。


输入样例:

vertebrado
ave
onivoro
• 1
• 2
• 3


输出样例:

pomba


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var a = StdIn.readLine();
      var b = StdIn.readLine();
      var c = StdIn.readLine();
      if(a == "vertebrado")
      {
          if(b == "ave")
          {
              if(c == "carnivoro") print("aguia");
              else print("pomba");
          }
          else
          {
              if(c == "onivoro") print("homem");
              else print("vaca");
          }
      }
      else
      {
          if(b == "inseto")
          {
              if(c == "hematofago") print("pulga");
              else print("lagarta");
          }
          else
          {
              if(c == "hematofago") print("sanguessuga");
              else print("minhoca");
          }
      }
  }
}


2-7 三角形类型

读取表示三角形三条边的3个浮点数(A,B和C)并按降序排列,使A边是三边中最大的一边。


接下来,根据以下情况,确定它们可以组成的三角形类型:

如果A≥B+C,则说明三条边不能构成三角形,请输出:NAO FORMA TRIANGULO

否则,说明三条边可以构成三角形,然后按如下情况输出:

如果A2=B2+C^2,请输出:TRIANGULO RETANGULO

如果A2>B2+C^2,请输出:TRIANGULO OBTUSANGULO

如果A2<B2+C^2,请输出:TRIANGULO ACUTANGULO

如果三个边长度都相同,请输出:TRIANGULO EQUILATERO

如果只有两个边长度相同而第三个边长度不同,请输出:TRIANGULO ISOSCELES


输入格式:

共一行,包含三个浮点数A,B,C(0<A,B,C<10.0)

输出格式:

输出A,B,C组成的三角形的类型。


注意,上述条件可能满足不止一条,这种情况下将所有类型名称,按题目介绍顺序输出,每行输出一条。


输入样例:

1.2 2.3 2.3


输出样例:

TRIANGULO ACUTANGULO
TRIANGULO ISOSCELES


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var s = StdIn.readLine().split(" ");
      var a = s(0).toDouble;
      var b = s(1).toDouble;
      var c = s(2).toDouble;
      var t = 0.0;
      if(a < b){
          t = a
          a = b
          b = t
      }
      if(a < c){
          t = a
          a = c
          c = t
      }
      if(b < c){
          t = b
          b = c
          c = t
      }
      if(a >= b + c) println("NAO FORMA TRIANGULO");
      else
      {
          if(a*a == b * b + c * c) println("TRIANGULO RETANGULO");
          else if(a * a > (b * b + c * c)) println("TRIANGULO OBTUSANGULO");
          else println("TRIANGULO ACUTANGULO");
          if(a == b && b == c) println("TRIANGULO EQUILATERO");
          else if((a == b && b != c) || (a == c && a != b) || (b == c && a != b)) println("TRIANGULO ISOSCELES");
    }
  }
}


2-8 游戏时间

读取四个整数A,B,C,D,用来表示游戏的开始时间和结束时间。

其中A和B为开始时刻的小时和分钟数,C和D为结束时刻的小时和分钟数。

请你计算游戏的持续时间。


比赛最短持续1分钟,最长持续24小时。


输入格式:

共一行,包含四个整数A,B,C,D。0≤A,C≤23,

0≤B,D≤59


输出格式:

输出格式为“O JOGO DUROU X HORA(S) E Y MINUTO(S)”,表示游戏共持续了X小时Y分钟。


输入样例:

7 53 7 53
• 1


输出样例:

O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var s = StdIn.readLine().split(" ")
      var a = s(0).toInt
      var b = s(1).toInt
      var c = s(2).toInt
      var d = s(3).toInt
      var x = ((c * 60) + d) - ((a * 60) + b);
      if(!x)
          println("O JOGO DUROU 24 HORA(S) E 0 MINUTO(S)")
      else
      {
          if(x < 0) x += (24*60)
          println("O JOGO DUROU "+(x/60)+" HORA(S) E "+(x%60)+" MINUTO(S)")
      }
  }
}


2-9 判断闰年

判断某年是否是闰年。


输入格式:

输入只有一行,包含一个整数a(0 < a < 3000)

输出格式:

一行,如果公元a年是闰年输出Y,否则输出N


输入样例:

2006


输出样例:

N


import scala.io.StdIn
object Main {
  def main(args: Array[String]): Unit = {
      var n = StdIn.readInt();
      if(n % 400 == 0 || n % 100 != 0 && n % 4 == 0) print("Y");
      else print("N");
  }
}


目录
相关文章
|
13天前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
28 3
|
5月前
|
消息中间件 分布式计算 Java
Scala函数式编程【从基础到高级】
Scala函数式编程【从基础到高级】
|
3月前
|
存储 监控 BI
上网行为管理软件中的Scala函数式编程
**使用Scala进行上网行为管理**\n本文探讨了如何利用Scala的函数式编程特性来监控和管理上网行为。示例中,定义了`WebActivity`案例类来存储数据,通过集合操作如`filter`, `map`和`foldLeft`处理数据,统计用户访问次数和活动。此外,还展示了如何使用HTTP库自动提交数据到网站。Scala的这种方法提高了数据处理效率,确保一致性和安全性。
49 0
|
5月前
|
人工智能 安全 人机交互
Scala 05 —— 函数式编程底层逻辑
Scala讲座探讨了函数式编程的底层逻辑,强调无副作用和确定性。函数式编程的核心是纯函数,避免读写数据等副作用,将其移至代码边缘处理。函数输入输出应清晰定义,避免模糊参数。函数视为数据范畴间的映射,以范畴论为基础。业务逻辑转化为纯函数式,通过声明式编程实现解耦,关注输入输出而非过程,便于验证和自动编程。将业务逻辑视作流水线,每个函数处理数据,避免全局变量和`var`,优先确保正确性再优化效率。
40 1
Scala 05 —— 函数式编程底层逻辑
|
5月前
|
消息中间件 分布式计算 大数据
Scala学习--day03--函数式编程
Scala学习--day03--函数式编程
|
5月前
|
数据采集 监控 安全
通过Scala实现局域网监控上网记录分析:函数式编程的优雅之路
在当今数字时代,网络监控成为保障信息安全的必要手段之一。本文将介绍如何使用Scala编程语言实现局域网监控上网记录分析的功能,重点探讨函数式编程的优雅之路。通过一系列代码示例,我们将展示如何利用Scala的函数式特性和强大的语法来实现高效的监控和分析系统。
248 1
|
11月前
|
数据采集 XML 编译器
Scala爬虫实战:采集网易云音乐热门歌单数据
Scala爬虫实战:采集网易云音乐热门歌单数据
|
分布式计算 API Scala
Scala函数式编程
Scala函数式编程
65 0
|
分布式计算 Ubuntu Java
|
大数据 编译器 Scala
大数据开发基础的编程语言的Scala的函数式编程范式
Scala是一种支持函数式编程范式的编程语言,它允许开发者使用函数和不可变数据结构来实现程序逻辑。本文将介绍Scala中函数式编程范式的概念和用法,帮助开发者更好地理解和应用这门语言。
107 0