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
import scala.io.StdIn import math.sqrt object Main { def main(args: Array[String]): Unit = { var n = StdIn.readInt(); for (i <- 1 to n) { var l = StdIn.readLine(); var s = l.split(" "); var a = s(0).toDouble; var b = s(1).toDouble; var c = s(2).toDouble; // println(a+" "+b+" "+c); var part1 : Double = (0 - b) / (2 * a); // println(part1); var pd = b * b - 4 * a * c; if (pd > 0) { var part2 : Double = sqrt(pd) / (2 * a); printf("x1=%.5f;x2=%.5f\n" ,part1+part2 ,part1-part2); } else if(pd == 0) { printf("x1=x2=%.5f\n",part1); } else { var part2 : Double = sqrt(-pd) / (2 * a); printf("x1=%.5f+%.5fi;x2=%.5f%.5fi\n",part1,part2,part1,-part2); } } } }
7-12 h0016.精准运动
小明 正在学习建模。她对带有活动部件的模型很感兴趣。作为她的第一个任务,她制作了一个大小2×n的矩形盒子,其中包含两个平行的导轨和每个导轨上的矩形条。短条的尺寸1×a,长条的尺寸 1×b. 长杆的两端各有一个塞子,而短的总是在这两个塞子之间。
只要短杆位于挡块之间,杆就可以沿着导轨移动,一次一根杆。所以,小明在每个矩形条移动选择其中一个条并移动它,而另一个保持在原位。最初,两个条都与盒子的一侧对齐,小明希望它们以尽可能少的移动到另一侧对齐。为了实现目标,他最少需要移动多少次?
输入格式:
输入在一行中给出3个整数a、b和c(1<=a
输出格式:
对每一组输入,在一行中输出小明最少需要移动的次数。
输入样例:
1. 1 3 6 2. 2 4 9
输出样例:
1. 5 2. 7
import scala.io.StdIn object Main{ def main(args: Array[String]): Unit={ while(true){ var l = StdIn.readLine(); var s = l.split(" "); var a = s(0).toInt; var b = s(1).toInt; var c = s(2).toInt; var ans : Int = 0; var x : Int = a; var y : Int = b; var z : Int = b - a; while(x < c || y < c) { if (x < c) { x += z; ans += 1; } if (y < c) { y += z; ans += 1; } } println(ans) } } }
7-13 h0010.sum
本题目要求读入1个整数n,然后输出1~n之间所有整数的和。
输入格式:
输入在一行中给出1个绝对值不超过10000的整数n。
输出格式:
对每一组输入,在一行中输出1~n之间所有整数的和。
输入样例:
-3 3
输出样例:
方法一:
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { while(true){ var n : Int = StdIn.readInt() var s : Int = 0 if(n < 1){ for(i<- Range(n,2)) s += i println(s) } else { for (i <- 1 to n) s += i println(s) } } } }
方法二:
x > 0 1~x (1+x)*x/2
x <0 -x~1 -((1+x)*x/2 - 1)
import scala.io.StdIn object Main { def main(args:Array[String]):Unit={ while(true) { var sum : Int = 0 var x = StdIn.readInt() if (x >= 0) sum = (x + 1) * x / 2 else if(x < 0) { x = -x sum = -((x + 1) * x / 2) + 1 } println(sum) } } }
7-14 h0080. 菱形
输入一个奇数n,输出一个由‘*’构成的n阶空心菱形。
输入格式:
一个奇数n。
输出格式:
输出一个由‘*’构成的n阶实心菱形。
具体格式参照输出样例。
输入样例:
5
输出样例:
1. * 2. * * 3. * * 4. * * 5. *
法一:
import scala.io.StdIn object Main{ def main(args: Array[String]): Unit = { //打印空心菱形: 空心正三角形+空心倒三角形 = 空心菱形 var n : Int = StdIn.readInt() //空心正三角形 // 6 ==12 // 5 7 ==12 // 4 8 ==12 // 3 9 ==12 // 2 10 ==12 //1 11==12 // 2 10 ==12 // 3 9 ==12 // 4 8 ==12 // 5 7 ==12 // 6 ==12 //每一个数字代表每个*号在所在行的列号 //由于菱形是对称的,所以先考虑上半部分 //通过观察上半部分为6行11列 //左半部分第1行为6、第2行为5、..............、第6行为1;由此可知外循环应使用for(i <- 6 to (1,-1)) //用i代表行号,j代表列号;当i=j或者j=12-i时该位置的应输出*号,其他位置输出空格。 for (i <- n / 2 + 1 to (1 ,-1)) { for (j <- 1 to n) { if (i == j || j == n + 1 -i) { print("*") } else { print(" ") } } println() } //倒三角形 for (i <- 2 to n / 2 + 1) { for (j <- 1 to n) { if (i == j || j == n + 1 -i) { print("*") } else print(" ") } println() } } }
法二:
import scala.io.StdIn object Main{ def main(args: Array[String]): Unit = { var n = StdIn.readInt() var a = n / 2 //棱形的上半部分 for (i <- 1 to n / 2 + 1) { //输出*号前面的空行 for (j <- 1 to a) print(" ") //输出星号 for (j <- 1 to 2 * i - 1) { if (j == 1 || j == 2 * i - 1) print("*") else print(" ") } //输出*号后面的空行 for (j <- 1 to a) print(" ") println() a -= 1 } //菱形的下半部分 a = 1 for (i <- n / 2 to (1, -1)) { //输出*号前面的空行 for (j <- 1 to a) print(" ") //输出星号 for (j <- 1 to 2 * i - 1) { if (j == 1 || j == 2 * i - 1) print("*") else print(" ") } //输出*号后面的空行 for (j <- 1 to a) print(" ") println() a += 1 } } }
7-16 h0157. 斐波那契数
给你一个整数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() def f(x: Int):Int= { if (x == 1) 1 else if (x == 2) 1 else f(x - 1) + f(x - 2) } var flag : Int = 0 for (i <- 1 to n) { print(f(i) + " ") } } }
法二:
import scala.io.StdIn; import scala.collection.mutable.ArrayBuffer //ArrayBuffer包使数组可变 object Main { //类 def main(args: Array[String]): Unit = { //main方法 var n = StdIn.readInt(); def dg(n: Int): Array[Int] = { //类型为Int def func(n: Int): Int = { //定义方法 if (n<=2) 1; else func(n - 1) + func(n - 2); //特征<=2,输出均为1,>2为(n-1)+(n-2) } // println(func(1)) //检查特例值数据 val array = new ArrayBuffer[Int]; //new一个对象 for (i <- 1 to n) { //确定i的取值范围 array.append(func(i)); //往buffer里添加func产生的数据 } array.toArray; //toArray } dg(n).foreach(x => print(s"$x ")); //遍历输出 } }
7-17 h0158. 猴子吃桃子问题
有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!以后每天猴子都吃其中的一半,然后再多吃一个。当到第n天时,想再吃时(还没吃),发现只有1个桃子了。问题:最初共多少个桃子?
输入格式:
在一行中给出1个不超过30的正整数n。
输出格式:
在一行中输出最初的桃子个数。
输入样例:
10
输出样例:
桃子=1534
法一:
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var n = StdIn.readInt(); val num = f(1,1,n); print("桃子="+num); } def f(a : Int ,d : Int ,n : Int): Int = { var ans = (a + 1) * 2; var dcnt = d + 1; if(dcnt == n) return ans; else f(ans ,dcnt ,n); } }
法二:
import scala.io.StdIn object Main { def main(args: Array[String]): Unit = { var n = StdIn.readInt() var sum : Int = 1 for (i <- 1 to n - 1) { sum = (sum + 1) * 2 } println("桃子=" + sum) } }