一、题目链接
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));
}
}