14:求满足条件的3位数

一、题目链接

http://noi.openjudge.cn/ch0113/14/

二、解题思路

三、实施步骤

四、Java程序

import java.util.Scanner;

public class Main {
    /**
     * 判断给定正整数是否为完全平方数
     *
     * @param n int类型的整数,代表给定正整数
     * @return true当且仅当n是完全平方数,否则false
     */
    public boolean isPerfectSquare(int n) {
        int root = (int) Math.sqrt(n); // 计算n的平方根的整数部分        
        return root * root == n; // 如果root的平方等于n,说明n是完全平方数,返回true,否则false
    }

    /**
     * 判断给定三位数是否至少有两位数字相同
     *
     * @param n int类型的整数,代表给定三位数
     * @return true当且仅当n至少有两位数字相同,否则false
     */
    public boolean twoSameDigits(int n) {
        int ones = n % 10; // n的个位数
        int tens = (n / 10) % 10; // n的十位数
        int hundreds = n / 100; // n的百位数        
        return ones == tens || tens == hundreds || ones == hundreds; // 如果n至少有两位数字相同,返回true,否则false
    }

    /**
     * 返回第n个既是完全平方数、又至少有两位数字相同的三位数
     *
     * @param n int类型的整数,代表符合要求的三位数的编号
     * @return int类型的整数,代表第n个既是完全平方数、又至少有两位数字相同的三位数
     */
    public int find(int n) {
        int current = 100; // 当前检测的三位数,初始时为100
        int ans = 0; // 保存结果
        /* 在尚未找到第n个符合要求的三位数时 */
        while (n > 0) {            
            if (isPerfectSquare(current) && twoSameDigits(current)) { // 如果当前检测的三位数current符合要求
                ans = current; // 将current保存在ans中
                n--; // 寻找下一个符合要求的数
            }
            current++; // 检测下一个三位数
        }
        return ans;
    }

    public static void main(String[] args) {
        Main test = new Main();
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.print(test.find(n));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江苏科技大学_计算机学院_潘磊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值