java实现809*??=800*??+9*??,求出??的值。其中??代表的是两位数,8*??的结果为两位数,9*??的结果为三位数
1 分析
1.1 此题需要控制台进行输入吗?
解答:不需要
1.2 ??的寻找范围是什么?
解答: 把第一个?当成十位,第二个问号当成个位,那么第一个?的取值范围为1-9,因为首位为0就构成不了两位数了,第二个?的取值范围为[0-9],因此外层for循环遍历范围为[1-9],内存for循环遍历范围为[0-9]
1.3 如何判断8*??得到的数是两位数,9*??得到的数字是三位数
两位数判断条件为: 数字>=10&&数字<=99
三位数判断条件为: 数字>=100&&数字<=999
因此本题需要同时满足的条件有以下两个
第一个条件: 8*??>=10&&8*??<=99
第二个条件:9*??>=100&&9*??<=999
1.4 如何退出两层for循环???
内层循环使用break跳出
外层循环使用标记位flag,默认值为false,当flag为true时会使用break跳出外层循环,当flag为false跳出外层循环操作不执行,只有找到符合条件的数后,标记位flag才会改为true
2 思路总结
2.1 建立两个for循环,外层循环变量i代表的是十位上的数字,内层循环遍历j代表的是个位上面的数字,建立一个变量temp存放着i和j构成的两位数
for (int i = 1; i <=9; i++) {
for (int j = 0; j <=9; j++) {
int temp=10*i+j;
}
}
2.2 在内层循环里面,判断??*8是否是二位数,??*9的结果是否是三位数??
if((temp*8<=99&&temp*8>=10)||(temp*9<=999&&temp*9>=100)){
if(809*temp==800*temp+9*temp){
System.out.println(temp);
flag=true;
break;
}
}
2.3 当找到符合条件的数字后,会先输出符合条件的数,再把flag的值改成true(便于外层循环能跳出),使用break关键字跳出内层循环
System.out.println(temp);
flag=true;
break;
2.4 在外层循环中也使用break跳出这个外层循环,因为flag的值为true
if(flag){
break;
}
3.示例代码
public class Work1 {
public static void main(String[] args) {
boolean flag=false;
for (int i = 1; i <=9; i++) {
for (int j = 0; j <=9; j++) {
int temp=10*i+j;
if((temp*8<=99&&temp*8>=10)||(temp*9<=999&&temp*9>=100)){
if(809*temp==800*temp+9*temp){
System.out.println(temp);
flag=true;
break;
}
}
}
if(flag){
break;
}
}
}
}