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.602个班的平均成绩是67.403个班的平均成绩是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

输出样例:

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

输出样例:

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");
  }
}

2-10 求一元二次方程的根

利用公式x1 = (-b + sqrt(b* b-4* a* c))/(2* a), x2 = (-b - sqrt(b* b-4* a* c))/(2* a)求一元二次方程ax^2 + bx + c =0的根,其中a不等于0。

输入格式:
第一行是待解方程的数目n。
其余n行每行含三个浮点数a, b, c(它们之间用空格隔开),分别表示方程ax^2 + bx + c =0的系数。

输出格式:
输出共有n行,每行是一个方程的根:
若是两个实根,则输出:x1=…;x2 = …
若两个实根相等,则输出:x1=x2=…
若是两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i

所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。
x1和x2的顺序:x1的实部>Re的实部||(x1的实部==x2的实部&&x1的虚部>=x2的虚部)

输入样例:

3
1.0 3.0 1.0
2.0 -4.0 2.0
1.0 2.0 8.0

输出样例:

x1=-0.38197;x2=-2.61803
x1=x2=1.00000
x1=-1.00000+2.64575i;x2=-1.00000-2.64575i
import scala.io.StdIn
import scala.math._

object Main {
  def main(args: Array[String]): Unit = {
      var n = StdIn.readInt();
      var i = 0
    while(i < n) {
        i += 1
        var s = StdIn.readLine().split(" ");
        var a = s(0).toDouble;
        var b = s(1).toDouble;
        var c = s(2).toDouble;
        var p : Double = b * b - 4 * a * c;
        var x1 : Double = -b / (2 * a);
        if(b == 0) x1 = 0;
        if(p > 0) printf("x1=%.5f;x2=%.5f\n",(-b + math.sqrt(p)) / (2 * a),(-b - math.sqrt(p)) / (2 * a));
        else if(p == 0) printf("x1=x2=%.5f\n",x1);
        else
        {
            p = -p;
            var y1 = math.sqrt(p) / (2 * a);
            var y2 = -math.sqrt(p) / (2 * a);
            printf("x1=%.5f%+.5fi;x2=%.5f%+.5fi\n",x1,y1,x1,y2);
        }
    }
  }
}

2-11 循环相克令

这循环相克令是一个两人玩的小游戏。

令词为“剪刀、石头、布”,两人同时说出令词,同时做出一个动作——剪刀的动作是伸出“食指+中指”;石头的动作是“五指握紧”伸出;布的动作是“五指打开”伸出。

双方以此动作判定输赢,剪刀赢布、布赢石头、石头赢剪刀,动作相同则视为平局。

现在给定你一系列的动作组合,请你判断游戏结果。

输入格式:
第一行包含整数 T(1≤T≤100),表示共有 T 组测试数据。

接下来 T 行,每行包含两个字符串,表示一局游戏中两人做出的动作,字符串为 Scissors、Rock 、Paper中的一个,这三个单词分别代表剪刀、石头、布。

输出格式:
如果第一个玩家赢了,则输出 Player1。

如果第二个玩家赢了,则输出 Player2。

如果平局,则输出 Repetition。

输入样例:

3
Scissors Paper
Rock Rock
Scissors Rock

输出样例:

Player1
Repetition
Player2
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 k = 0;
          var s=StdIn.readLine().split(" ")
          var s1=s(0)
          var s2=s(1)
          if(s1 == "Scissors" && s2 == "Paper" ||
             s1 == "Rock" && s2 == "Scissors" ||
             s1 == "Paper" && s2 == "Rock") println("Player1");
          else if(s1 == s2) println("Repetition")
          else println("Player2")
    }
  }
}

2-12 精准运动

小明 正在学习建模。她对带有活动部件的模型很感兴趣。作为她的第一个任务,她制作了一个大小2×n的矩形盒子,其中包含两个平行的导轨和每个导轨上的矩形条。短条的尺寸1×a,长条的尺寸 1×b. 长杆的两端各有一个塞子,而短的总是在这两个塞子之间。

只要短杆位于挡块之间,杆就可以沿着导轨移动,一次一根杆。所以,小明在每个矩形条移动选择其中一个条并移动它,而另一个保持在原位。最初,两个条都与盒子的一侧对齐,小明希望它们以尽可能少的移动到另一侧对齐。为了实现目标,他最少需要移动多少次?

输入格式:
输入在一行中给出3个整数a、b和c(1<=a<b<=n<=10^7),其间以空格分隔。

输出格式:
对每一组输入,在一行中输出小明最少需要移动的次数。

输入样例:

1 3 6
2 4 9

输出样例:

5
7
import scala.io.StdIn

object Main {
  def main(args: Array[String]): Unit = {
    while(true) {
        var s = StdIn.readLine().split(" ");
        var a = s(0).toInt;
        var b = s(1).toInt;
        var c = s(2).toInt;
        if(b == c) println(1);
        else
        {
            var k = 0;
            var s = b - a
            while(b < c || a < c)
            {
                if(b < c)
                {
                    b += s;
                    k += 1;
                }
                if(a < c)
                {
                    a += s
                    k += 1
                }
            }
            println(k)
        }
    }
  }
}

2-13 sum

本题目要求读入1个整数n,然后输出1~n之间所有整数的和。

输入格式:
输入在一行中给出1个绝对值不超过10000的整数n。

输出格式:
对每一组输入,在一行中输出1~n之间所有整数的和。

输入样例:

-3
3

输出样例:

-5
6
import scala.io.StdIn

object Main {
  def main(args: Array[String]): Unit = {
      while(true)
      {
          var n = StdIn.readInt();
          var sum = 0;
          if(n > 0)
          {
              for(i <- 1 to n)
              {
                  sum += i;
              }
              println(sum);
          }
          else
          {
              for(i <- n to 1)
              {
                  sum += i;
              }
              println(sum);
          }
      }
  }
}

2-14 菱形

输入一个奇数n,输出一个由‘*’构成的n阶空心菱形。

输入格式:
一个奇数n。

输出格式:
输出一个由‘*’构成的n阶实心菱形。

具体格式参照输出样例。

输入样例:

5

输出样例:

  *  
 * * 
*   *
 * * 
  *  
import scala.io.StdIn
import scala.math._ 

object Main {
 def main(args: Array[String]): Unit = {
     var n = StdIn.readInt();
     var cx = n / 2
     var cy = n / 2
     for(i <- 0 to n - 1)
     {
         for(j <- 0 to n - 1)
         {
             if(math.abs(i - cx) + math.abs(j - cy) == n / 2) print('*');
             else print(' ');
         }
         println();
     }
 }
}

2-15 特殊数字

我们规定,对于一个整数 a,如果其各位数字相加之和能够被 4 整除,则称它是一个特殊数字。

现在,给定一个整数 n,请你计算并输出不小于 n 的最小特殊数字。

输入格式:
一个整数 n,1≤n≤1000。

输出格式:
一个整数,表示不小于 n 的最小特殊数字。

输入样例:

42

输出样例:

44
import scala.io.StdIn

object Main {
  def main(args: Array[String]): Unit = {
      var n = StdIn.readLine();
      var x = n.toInt;
      var t = 0;
      for(i <- x to 1004)
      {
          var nn = i.toString
          var sum : Int = 0;
          for(c <- nn)
          {
              sum += c.toInt;
          }
          if(sum % 4 == 0 && t == 0)
          {
              print(i);
              t = 1;
          }
      }
  }
}

2-16 斐波那契数

给你一个整数n,求出它的斐波那契数是多少?

输入格式:
在一行中给出1个不超过30的正整数n。

输出格式:
在一行中输出斐波那契数的值。

输入样例:

5

输出样例:

1 1 2 3 5
import scala.io.StdIn

object Main {
  def main(args: Array[String]): Unit = {
      var n = StdIn.readInt();
      var a = 1;
      var b = 1;
      for(i <- 1 to n)
      {
          print(a + " ");
          var c = a + b;
          a = b;
          b = c;
      }
  }
}

2-17 猴子吃桃子问题

有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!以后每天猴子都吃其中的一半,然后再多吃一个。当到第n天时,想再吃时(还没吃),发现只有1个桃子了。问题:最初共多少个桃子?

输入格式:
在一行中给出1个不超过30的正整数n。

输出格式:
在一行中输出最初的桃子个数。

输入样例:

10

输出样例:

桃子=1534
import scala.io.StdIn

object Main {
  def main(args: Array[String]): Unit = {
    var n = StdIn.readInt();
      var s = 1;
      for(i <- 1 to n - 1)
          s = (s + 1) * 2;
      print("桃子="+s);
  }
}

三:第3章 数据结构知识

3-1 输出素数

编写一个循环,判断A~B之间有多少个素数,并输出所有素数。素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。

输入格式:
输入在一行中给出2个正整数A和B(10<=a,b<=10000)。

输出格式:
输出A~B之间的所有素数,且每个素数占一行。

输入样例:

10 20

输出样例:

11
13
17
19
import scala.io.StdIn

object Main {
    def f(n : Int): Int =  // 判断素数
    {
        if(n < 2) return 0
        var i = 2;
        for(i <- 2 to n / i)
            if(n % i == 0) return 0
        return 1
    }
  def main(args: Array[String]): Unit = {
      while(true)
      {
          var s = StdIn.readLine().split(' ');
          var A = s(0).toInt;
          var B = s(1).toInt;
          for(i <- A + 1 to B)
          {
              if(f(i) != 0) println(i);
          }
      }
    
  }
}

3-2 分解质因数

将一个正整数分解质因数。例如:输入90,打印出

90=2*3*3*5

输入格式:
输入在一行中给出1个正整数n(n<10e9)。

输出格式:
在一行中输出n和他的因子值,如样例所示。

输入样例:

90

输出样例:

90=2*3*3*5
import scala.io.StdIn

object Main {
  def main(args: Array[String]): Unit = {
    var n = StdIn.readInt();
      var f = new Array[Int](10100)
      var j = 2
      var i = 0
      var cnt = 0;
      print(n+"=")
      for(i <- 2 to n)
      {
          if(n % j == 0)
          {
              f(cnt) = j;
              cnt += 1;
              n /= j
              j -= 1
          }
          j += 1
      }
      var t = 0
      for(p <- f if p != 0)
      {
          if(t != 0) print("*");
          if(p != 0) print(p);
          t = 1
      }
  }
}

3-3 h0161. 求最大公约数和最小公倍数

输入两个正整数a和b,求其最大公约数和最小公倍数。

输入格式:
输入在一行中给出2个不超过100000的正整数A和B。

输出格式:
在2行中输出A、B的最大公约数和最小公倍数。

输入样例:

42 36

输出样例:

最大公约数为:6
最小公倍数为:252
import scala.io.StdIn

object Main {
    def gcd(a:Int,b:Int):Int=
    {
        if(b == 0) return a;
        else return gcd(b,a%b);
    }
  def main(args: Array[String]): Unit = {
    var s = StdIn.readLine().split(' ');
      var a = s(0).toInt;
      var b = s(1).toInt;
      var g = gcd(a,b);
      println("最大公约数为:"+g);
      println("最小公倍数为:"+a * b / g);
  }
}

3-4 h0162. 字符的个数

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

输入格式:
在一行中给出不超过1000个的字符。

输出格式:
分别输出英文字母、空格、数字和其它字符的个数。

输入样例:

sghye356hf7456767632re;'wetet.';'wetye'tyye;'rw'wetry etew er

输出样例:

字母有 36 个
空格有 2 个
数字有 13 个
其他字符有 10
import scala.io.StdIn

object Main {
  def main(args: Array[String]): Unit = {
   var s = StdIn.readLine();
      var a = 0
      var b = 0
      var cc = 0
      var d = 0
      for(c <- s)
      {
          if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') a += 1;
          else if(c == ' ') b += 1;
          else if(c >= '0' && c <= '9') cc += 1;
          else d += 1;
      }
      println("字母有 "+a+" 个");
      println("空格有 "+b+" 个");
      println("数字有 "+cc+" 个");
      println("其他字符有 "+d+" 个");
  }
}

四:面向对象编程

4-1 设计一个矩形类Rectangle

设计一个名为Rectangle的类表示矩形。这个类包括:

两个名为width和height的double类型数据域,它们分别表示矩形的宽和高。width和height的默认值都为1。
一个用于创建默认矩形的无参构造方法。
一个创建指定width和height值的矩形的构造方法。
一个名为getArea()的方法,返回该矩形的面积。
一个名为getPerimeter()的方法,返回周长。
编写一个测试程序,分别输入两个矩形的高和宽,创建两个Rectangle对象。按照顺序显示每个矩形的宽、高、面积和周长。

输入格式:
在一行内输入4个数据,依次为两个矩形的高和宽

输出格式:
每行输出一个矩形的宽、高、面积和周长,中间用空格隔开

输入样例:
在这里给出一组输入。例如:

4 40 3.5 35.9

输出样例:
在这里给出相应的输出。例如:

4.0 40.0 160.0 88.0
3.5 35.9 125.64999999999999 78.8
import scala.io.StdIn

class Rectangle(x : Double,y : Double)
{
  var a = x
  var b = y
  print(a)
  print(" " + b);
  def getArea(a : Double,b : Double)
  {
    var area = a * b
    print(" " + area)
  }
  def getPerimeter(a : Double,b : Double)
  {
    var C = (a + b) * 2
    println(" " + C)
  }
}
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 d = s(3).toDouble;
    var rest1 = new Rectangle(a,b);
    rest1.getArea(a,b);
    rest1.getPerimeter(a,b);
    var rest2 = new Rectangle(c,d);
    rest2.getArea(c,d);
    rest2.getPerimeter(c,d);
  }
}

4-2 定义一个类表示圆(Circle)

定义一个类表示圆(Circle),成员变量r表示圆的半径,成员方法printArea( )用于输出圆的面积。

定义测试类Main,在它的main方法中定义两个Circle类的对象c1、c2,从键盘输入两个数据分别作为c1和c2的半径,并分别调用它们的printArea( )方法输出其面积。

(提示:使用Math.PI表示圆周率,使用Scanner类进行输入,使用printf函数保留小数点后两位。)

输入格式:
输入两个数据分别作为圆c1和c2的半径,中间以空格隔开。

输出格式:
按两行分别输出圆c1和c2的面积,保留小数点后两位。

输入样例:
在这里给出一组输入。例如:

3  7.2

输出样例:
在这里给出相应的输出。例如:

28.27
162.86
import scala.io.StdIn

class Circle(x : Double)
{
  var r = x;
  def getArea(r : Double)
  {
    printf("%.2f\n",Math.PI * r * r)
  }
}
object Main {
  def main(args: Array[String]): Unit = {
    var s = StdIn.readLine().split("  ");
    var r1 = s(0).toDouble;
    var r2 = s(1).toDouble;
    var cir1 = new Circle(r1);
    cir1.getArea(r1);
    var cir2 = new Circle(r2);
    cir2.getArea(r2);
  }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值