• 第2章 控制结构和函数(编程题)


    7-10 h0053. 求一元二次方程的根

    利用公式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的虚部)

    输入样例:

    1. 3
    2. 1.0 3.0 1.0
    3. 2.0 -4.0 2.0
    4. 1.0 2.0 8.0

    输出样例:

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

    1. x1=-0.38197;x2=-2.61803
    2. x1=x2=1.00000
    3. x1=-1.00000+2.64575i;x2=-1.00000-2.64575i
    1. import scala.io.StdIn
    2. import math.sqrt
    3. object Main {
    4. def main(args: Array[String]): Unit = {
    5. var n = StdIn.readInt();
    6. for (i <- 1 to n) {
    7. var l = StdIn.readLine();
    8. var s = l.split(" ");
    9. var a = s(0).toDouble;
    10. var b = s(1).toDouble;
    11. var c = s(2).toDouble;
    12. // println(a+" "+b+" "+c);
    13. var part1 : Double = (0 - b) / (2 * a);
    14. // println(part1);
    15. var pd = b * b - 4 * a * c;
    16. if (pd > 0) {
    17. var part2 : Double = sqrt(pd) / (2 * a);
    18. printf("x1=%.5f;x2=%.5f\n" ,part1+part2 ,part1-part2);
    19. }
    20. else if(pd == 0) {
    21. printf("x1=x2=%.5f\n",part1);
    22. }
    23. else {
    24. var part2 : Double = sqrt(-pd) / (2 * a);
    25. printf("x1=%.5f+%.5fi;x2=%.5f%.5fi\n",part1,part2,part1,-part2);
    26. }
    27. }
    28. }
    29. }

     

    7-12 h0016.精准运动

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



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

     

    输入格式:

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

    输出格式:

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

    输入样例:

    1. 1 3 6
    2. 2 4 9

    输出样例:

    1. 5
    2. 7
    1. import scala.io.StdIn
    2. object Main{
    3. def main(args: Array[String]): Unit={
    4. while(true){
    5. var l = StdIn.readLine();
    6. var s = l.split(" ");
    7. var a = s(0).toInt;
    8. var b = s(1).toInt;
    9. var c = s(2).toInt;
    10. var ans : Int = 0;
    11. var x : Int = a;
    12. var y : Int = b;
    13. var z : Int = b - a;
    14. while(x < c || y < c) {
    15. if (x < c) {
    16. x += z;
    17. ans += 1;
    18. }
    19. if (y < c) {
    20. y += z;
    21. ans += 1;
    22. }
    23. }
    24. println(ans)
    25. }
    26. }
    27. }

     

    7-13 h0010.sum

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

    输入格式:

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

    输出格式:

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

    输入样例:

    1. -3
    2. 3

    输出样例:

    方法一:

    1. import scala.io.StdIn
    2. object Main {
    3. def main(args: Array[String]): Unit = {
    4. while(true){
    5. var n : Int = StdIn.readInt()
    6. var s : Int = 0
    7. if(n < 1){
    8. for(i<- Range(n,2)) s += i
    9. println(s)
    10. }
    11. else {
    12. for (i <- 1 to n) s += i
    13. println(s)
    14. }
    15. }
    16. }
    17. }

    方法二:

    x > 0 1~x  (1+x)*x/2

    x <0 -x~1 -((1+x)*x/2 - 1)

    1. import scala.io.StdIn
    2. object Main {
    3. def main(args:Array[String]):Unit={
    4. while(true) {
    5. var sum : Int = 0
    6. var x = StdIn.readInt()
    7. if (x >= 0)
    8. sum = (x + 1) * x / 2
    9. else if(x < 0) {
    10. x = -x
    11. sum = -((x + 1) * x / 2) + 1
    12. }
    13. println(sum)
    14. }
    15. }
    16. }

    7-14 h0080. 菱形

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

    输入格式:

    一个奇数n。

    输出格式:

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

    具体格式参照输出样例。

    输入样例:

    5
    

    输出样例:

    1. *
    2. * *
    3. * *
    4. * *
    5. *

    法一:

    1. import scala.io.StdIn
    2. object Main{
    3. def main(args: Array[String]): Unit = {
    4. //打印空心菱形: 空心正三角形+空心倒三角形 = 空心菱形
    5. var n : Int = StdIn.readInt()
    6. //空心正三角形
    7. // 6 ==12
    8. // 5 7 ==12
    9. // 4 8 ==12
    10. // 3 9 ==12
    11. // 2 10 ==12
    12. //1 11==12
    13. // 2 10 ==12
    14. // 3 9 ==12
    15. // 4 8 ==12
    16. // 5 7 ==12
    17. // 6 ==12
    18. //每一个数字代表每个*号在所在行的列号
    19. //由于菱形是对称的,所以先考虑上半部分
    20. //通过观察上半部分为6行11列
    21. //左半部分第1行为6、第2行为5、..............、第6行为1;由此可知外循环应使用for(i <- 6 to (1,-1))
    22. //用i代表行号,j代表列号;当i=j或者j=12-i时该位置的应输出*号,其他位置输出空格。
    23. for (i <- n / 2 + 1 to (1 ,-1)) {
    24. for (j <- 1 to n) {
    25. if (i == j || j == n + 1 -i) {
    26. print("*")
    27. }
    28. else {
    29. print(" ")
    30. }
    31. }
    32. println()
    33. }
    34. //倒三角形
    35. for (i <- 2 to n / 2 + 1) {
    36. for (j <- 1 to n) {
    37. if (i == j || j == n + 1 -i) {
    38. print("*")
    39. }
    40. else print(" ")
    41. }
    42. println()
    43. }
    44. }
    45. }

    法二:

    1. import scala.io.StdIn
    2. object Main{
    3. def main(args: Array[String]): Unit = {
    4. var n = StdIn.readInt()
    5. var a = n / 2
    6. //棱形的上半部分
    7. for (i <- 1 to n / 2 + 1) {
    8. //输出*号前面的空行
    9. for (j <- 1 to a) print(" ")
    10. //输出星号
    11. for (j <- 1 to 2 * i - 1) {
    12. if (j == 1 || j == 2 * i - 1) print("*")
    13. else print(" ")
    14. }
    15. //输出*号后面的空行
    16. for (j <- 1 to a) print(" ")
    17. println()
    18. a -= 1
    19. }
    20. //菱形的下半部分
    21. a = 1
    22. for (i <- n / 2 to (1, -1)) {
    23. //输出*号前面的空行
    24. for (j <- 1 to a) print(" ")
    25. //输出星号
    26. for (j <- 1 to 2 * i - 1) {
    27. if (j == 1 || j == 2 * i - 1) print("*")
    28. else print(" ")
    29. }
    30. //输出*号后面的空行
    31. for (j <- 1 to a) print(" ")
    32. println()
    33. a += 1
    34. }
    35. }
    36. }

    7-16 h0157. 斐波那契数

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

    输入格式:

    在一行中给出1个不超过30的正整数n。

    输出格式:

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

    输入样例:

    5
    

    输出样例:

    1 1 2 3 5 

    法一: 

    1. import scala.io.StdIn
    2. object Main {
    3. def main(args: Array[String]): Unit = {
    4. var n = StdIn.readInt()
    5. def f(x: Int):Int= {
    6. if (x == 1) 1
    7. else if (x == 2) 1
    8. else f(x - 1) + f(x - 2)
    9. }
    10. var flag : Int = 0
    11. for (i <- 1 to n) {
    12. print(f(i) + " ")
    13. }
    14. }
    15. }

     法二:

    1. import scala.io.StdIn;
    2. import scala.collection.mutable.ArrayBuffer //ArrayBuffer包使数组可变
    3. object Main { //类
    4. def main(args: Array[String]): Unit = { //main方法
    5. var n = StdIn.readInt();
    6. def dg(n: Int): Array[Int] = { //类型为Int
    7. def func(n: Int): Int = { //定义方法
    8. if (n<=2) 1;
    9. else func(n - 1) + func(n - 2); //特征<=2,输出均为1,>2为(n-1)+(n-2)
    10. }
    11. // println(func(1)) //检查特例值数据
    12. val array = new ArrayBuffer[Int]; //new一个对象
    13. for (i <- 1 to n) { //确定i的取值范围
    14. array.append(func(i)); //往buffer里添加func产生的数据
    15. }
    16. array.toArray; //toArray
    17. }
    18. dg(n).foreach(x => print(s"$x ")); //遍历输出
    19. }
    20. }

    7-17 h0158. 猴子吃桃子问题

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

    输入格式:

    在一行中给出1个不超过30的正整数n。

    输出格式:

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

    输入样例:

    10
    

    输出样例:

    桃子=1534

     

    法一:

    1. import scala.io.StdIn
    2. object Main {
    3. def main(args: Array[String]): Unit = {
    4. var n = StdIn.readInt();
    5. val num = f(1,1,n);
    6. print("桃子="+num);
    7. }
    8. def f(a : Int ,d : Int ,n : Int): Int = {
    9. var ans = (a + 1) * 2;
    10. var dcnt = d + 1;
    11. if(dcnt == n) return ans;
    12. else f(ans ,dcnt ,n);
    13. }
    14. }

     法二:

    1. import scala.io.StdIn
    2. object Main {
    3. def main(args: Array[String]): Unit = {
    4. var n = StdIn.readInt()
    5. var sum : Int = 1
    6. for (i <- 1 to n - 1) {
    7. sum = (sum + 1) * 2
    8. }
    9. println("桃子=" + sum)
    10. }
    11. }

  • 相关阅读:
    第2-4-7章 docker安装WorkBench-规则引擎Drools-业务规则管理系统-组件化-中台
    MyBatis基于XML的详细使用-参数、返回结果 处理
    学习嵌入式系统的推荐步骤:
    android studio编译项目遇到的常见问题
    python try-except捕获异常的方法
    基于单片机的电子万年历设计
    远程监控电脑软件怎么选?
    C++拷贝构造函数
    考研模拟面试-答案【攻略】
    CancerGPT:使用大型预训练语言模型进行少样本药物配对协同作用预测
  • 原文地址:https://blog.csdn.net/qq_51916951/article/details/125476731