解法一:(个人觉得是一种比较普遍,也比较快的解法)
public class Main {
public static void main(String[] args){
int a, b, c,i,j=0;
int[] s=new int[9];
for (a = 100; a < 333; a++)
{
b = 2 * a;c = 3 * a; //让三个数成比例
s[0] = a / 100; s[1] = a % 100 / 10; s[2] = a % 10; //分离每一位数,并用数组接受
s[3] = b / 100; s[4] = b % 100 / 10; s[5] = b % 10;
s[6] = c / 100; s[7] = c % 100 / 10; s[8] = c % 10;
for (i = 0; i < 8; i++)
{
for (j = i + 1; j < 9; j++)
if (s[i] == s[j]||s[i]==0||s[j]==0)break;//判断元素是否相等
if (j < 9) break;
}
if (i == 8 && j == 9)
System. out. println(a+" " +b+ " "+c);
}
}
}
解法二:(认可度最高的解法)
public class Main {
public static void main(String[] args) {
int a, b, c;
int[] s = new int[9];
for (a = 100; a < 333; a++) {
b = 2 * a;
c = 3 * a;
s[0] = a / 100;s[1] = a % 100 / 10;s[2] = a % 10;
s[3] = b / 100;s[4] = b % 100 / 10;s[5] = b % 10;
s[6] = c / 100;s[7] = c % 100 / 10;s[8] = c % 10;
int n=1, q=0;
for (int k = 0; k <s.length ; k++) {
n=n*s[k];
q=q+s[k];
}
if (n==1*2*3*4*5*6*7*8*9&&q==1+2+3+4+5+6+7+8+9)//这里通过两个条件限定这九个数
System.out.println(a+" "+b+" "+c);
}
}
注意:这里是两个方程解九个未知数,答案肯定不唯一。但是这样写的原因就是数的范围被限定了。在该范围内只有一解,而这种方法只适合解这一道题,理论上是不严谨的。这种思想在日常的开发过程中用的很多,只专注与某个方法的实现,单单就一个问题而言。因为开发一个完整没有理论错误的程序是很难的。
解法三与解法四的差距不是特别大,并且由于HashSet的链表结构导致查询慢,所以三四方法的内存与时间会比一二方法多上一点。
解法三:利用HashSet集合不能存储相同的元素来判断数字是否相等(注意0这个元素),将满足!set.contains(0)&&set.size()==9的三组数输出即可。
import java.util.HashSet;
public class Main {
public static void main(String[] args){
int a;
HashSet<Integer> set=new HashSet<>();
for (a = 123; a <=329 ; a++) {
set.add(a/100);set.add(a%100/10);set.add(a%10);
set.add(2*a/100);set.add(2*a%100/10);set.add(2*a%10);
set.add(3*a/100);set.add(3*a%100/10);set.add(3*a%10);
if (!set.contains(0)&&set.size()==9){
System.out.println(a+" "+2*a+" "+3*a);
set.clear();
}
set.clear();
}
}
}
解法四:(第四种方法把0的判断提到了之前)
import java.util.Set;
public class Main {
public static void main(String[] args) {
int a;
HashSe<Integer> set=new HashSet<>();
for (a = 123; a <=329 ; a++) {
if(a%100/10==0||a%10==0||
2*a%100/10==0||2*a%10==0||
3*a%100/10==0||3*a%10==0) continue;
set.add(a/100);set.add(a%100/10);set.add(a%10);
set.add(2*a/100);set.add(2*a%100/10);set.add(2*a%10);
set.add(3*a/100);set.add(3*a%100/10);set.add(3*a%10);
if (set.size()==9){
System.out.println(a+" "+2*a+" "+3*a);
set.clear();
}
set.clear();
}
}
}
运行结果:
昨天刚学了html的一些内容,就迫不及待的想做个京东上面的搜索条,结果做是做出...
首先插件配备好了,写一个HTML测试一下 首先创建一个文件夹,创建一个HTML 文件...
一.前言 .NET Core 是一个通用开发平台,由 Microsoft 和 GitHub 上的 .NET 社区...
在项目开始之前我们可以先去了解一下IConfiguration接口,.Net Core Web应用程序...
JSP spring boot / cloud 使用filter防止XSS 一.前言 XSS(跨站脚本攻击) 跨站脚...
2 月 18 日消息 据外媒 Windowslatest 报道,在预览版本中发现的参考资料表明,...
第一课趣味二进制——修改植物大战僵尸数据 任务介绍 学习目标 知识需求 需求工...
文章目录 前言 本周最重要的五件事情 本周搞砸的四件事情 本周的四个启发 前言 ...
IT之家2月18日消息外媒 Windows Latest 报道,微软正在与谷歌合作进行一项新的改...
1.ajax跨域传递值是所需要的回传的类型为jsonp $.ajax({url: "http://.......",t...