2021-08-20

这篇博客包含两个编程题目,一是利用递归计算数列的前m项和,数列第一项为n,后续项为前一项的平方根;二是找出指定范围内所有水仙花数,即百位、十位、个位立方和等于其本身。程序实现了这两个功能,并对输入数据进行了合法性检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目描述:
数列的定义如下: 数列的第一项为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
	    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值