统计
  • 建站日期:2019-12-01
  • 文章总数:2002 篇
  • 评论总数:2124 条
  • 分类总数:21 个
  • 最后更新:11月21日
文章 未分类

JAVA基础算法 三位五角星数相加☆☆☆ + ☆☆☆ = ☆☆☆

程序员阿鑫
首页 未分类 正文


JAVA基础算法三位五角星数相加☆☆☆+☆☆☆=☆☆☆
-程序员阿鑫-带你一起秃头
-第1
张图片

如果哪位大佬有更好的解题思路,可以互相交流一下

先看题:

看这个算式:
☆☆☆ + ☆☆☆ = ☆☆☆
如果每个五角星代表 1 ~ 9 的不同的数字。
这个算式有多少种可能的正确填写方法?
173 + 286 = 459
295 + 173 = 468
173 + 295 = 468
183 + 492 = 675
以上都是正确的填写法!
注意:
111 + 222 = 333 是错误的填写法!
因为每个数字必须是不同的! 
也就是说:1~9中的所有数字,每个必须出现且仅出现一次!
注意:
不包括数字“0”!
注意:
满足加法交换率的式子算两种不同的答案。
所以答案肯定是个偶数!

注意:
只要求计算不同的填法的数目
不要求列出所有填写法
更不要求填写源代码!

 思路:

先用for循环循环遍历从100-999的数字,然后再把每一位数的个、十、百拿下来,利用set集合去重特性筛选1-9数字,然后输出

1.两个三位数字相加,结果还等于三位数字,所以数字范围在100 ≥ 数字 < 1000 

2.1~9数字中每个必须出现一次,第一想到的是if判断筛选,但是太复杂了需要些好多,接着又想到set集合

代码:

import java.util.HashSet;
import java.util.Set;
public class Main10 {
    public static void main(String[] args) {
        int sum = 0;
        int count = 0;
        //利用set集合去重特性筛选1~9数字
        Set<Integer> set = new HashSet<Integer>();
        //两位百位数相加的结果等于三位数  限制数字位数
        for(int i = 100; i < 1000;i++) {
            for(int j = 100; j < 1000;j++) {
                sum = i+j;
                //如果sum和不等于四位数时 跳出本次循环进入下一次
                if(sum > 1000) {
                    continue;
                }
                //将没位数的个十、百、位单独拿下来
                int a1= i /100 % 10;
                int a2= i /10 % 10;
                int a3= i % 10;

                //放进set集合中
                set.add(a1);
                set.add(a2);
                set.add(a3);

                int b1= j /100 % 10;
                int b2= j /10 % 10;
                int b3= j % 10;

                set.add(b1);
                set.add(b2);
                set.add(b3);

                int c1= sum /100 % 10;
                int c2= sum /10 % 10;
                int c3= sum % 10;

                set.add(c1);
                set.add(c2);
                set.add(c3);

                //判断长度是否等于9并且不可以包含0
                if(set.size() == 9 && !set.contains(0)) {  //contains代表可以包含  但前面有!,所以此处表示不可以包含
                    System.out.println(i+"+"+j+"="+sum);
                    //计数
                    count++;
                }
                //移除set集合中所有元素
                set.clear(); 
                /**
                 * 清空是为了 不影响 下一次的判断,如果不清空 会影响下一次的值判断
                 * 三个数字不是不能有0,但是从100开始的如果不清空下一次 循环过来set集合里面有之前的值会影响判断
                 */
            }
        }
        //计数才是答案,问题问的是有多少个而不是生成所有式子
        System.err.println(count);
    }

}

 运行结果:


JAVA基础算法三位五角星数相加☆☆☆+☆☆☆=☆☆☆
-程序员阿鑫-带你一起秃头
-第2
张图片

以上是《JAVA基础算法 三位五角星数相加☆☆☆ + ☆☆☆ = ☆☆☆》的全部内容,

感谢您对程序员阿鑫博客的支持!

 

版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!

-- 展开阅读全文 --
这篇文章最后更新于2020-8-31,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
mysql5.7忘记root密码后如何重置root密码?
« 上一篇
QQXML卡片爱奇艺引流红包代码
下一篇 »

发表评论