一、题目描述:
数列的定义如下: 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。
输入数据:
输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述。
输出数据:
对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double n = sc.nextDouble(); // 输入n
int m = sc.nextInt(); // 输入m
System.out.println(String.format("%.2f", getSum(n, m))); // 结果保留2位小数
}
// 使用递归
public static double getSum(double n, int m){
if (m == 1)
return n;
return n + getSum(Math.sqrt(n), m - 1);
}
二、题目描述
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开; 如果给定的范围内不存在水仙花数,则输出no; 每个测试实例的输出占一行。
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
getFlower(n, m);
}
public static void getFlower(int n, int m){
if (n < 100 || n>999 || m<100 || m>999) // 控制输入范围
System.out.println("no");
ArrayList<Integer> res = new ArrayList<>();
for (; n<=m; n++){
int a = n/100; // 获取百分位
int b = (n%100)/10; // 获取十分位
int c = n%10; // 获取个位
if (n == (a*a*a + b*b*b + c*c*c))
res.add(n);
}
if (!res.isEmpty())
for (Integer re : res) {
System.out.print(re + " "); // 有水仙花,输出结果,之间用空格隔开
}
else
System.out.println("no"); // 没有水仙花,输出no
}
}