@Java
大家好,我是Ziph!
题目:
(for循环)找出四位整数 abcd 中满足 (ab+cd)(ab+cd)=abcd 的数
方案1:
思路1:
利用普通for循环思路计算
既然是4位数,那么4位数的开始就是1000,结束是9999。这就是for循环中要用的数字参数,abcd即是1000(开始)。那么还得需要满足题意,就得创建两个变量了就是ab、cd。ab、cd在abcd中得到就类似得到个位、十位、百位了吧,之后满足 (ab+cd)(ab+cd)=abcd 条件即可打印abcd的值。
public class TestPlan {
public static void main(String[] args) {
for (int abcd = 1000; abcd <= 9999; abcd++) {
int ab = abcd / 100;//类似求个位、十位、百位的案例
int cd = abcd % 100;//如果还不知道怎么求,可以把ab、cd拆开看就相当于是个位和十位了
if ((ab + cd) * (ab + cd) == abcd) {//满足条件
System.out.println(abcd);
}
}
}
}
方案2(优化版本):
思路2:
利用完全平方数计算
先看题干,题干要求满足 (ab+cd)(ab+cd)=abcd 这个条件,而条件中两个(ab + cd)相乘,我们可以把这个整体看成一个数定义变量为num,也就是说利用num的平方来求abcd。而abcd这个数就被称为完全平方数。(8 * 8 = 64,9 * 9 = 81 而64、81这样的数就被称为完全平方数)那么我们现在找离1000最近的完全平方数就是我们很熟悉的32 * 32 = 1024,100 * 100 = 10000,我们取99 * 99的99作为循环中的另一个参数。这样32和99之间计算机参与判断的数就只有67个,比起从1000到9999少判断了很多吧,大大提高了计算机的执行效率,优化了我们的编码,提升了你的逼格,岂不是一箭三雕!
public class TestPlan {
public static void main(String[] args) {
for (int num = 32; num <= 99; num++) {
int abcd = num * num;
int ab = abcd / 100;
int cd = abcd % 100;
if (ab + cd == num) {//因为我们当初把(ab + cd)这个整体看成了num
System.out.println(abcd);
}
}
}
}
执行结果为:2025、3025、9801
有问题请留言回复!