`
MouseLearnJava
  • 浏览: 466100 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

1到9九个数字,每3个数字形成一个三位数,且都是完全平方数,每个数字只允许使用一次。

    博客分类:
  • Java
 
阅读更多
1到9九个数字,每3个数字形成一个三位数,且都是完全平方数,每个数字只允许使用一次。求解。



分析:

1.       确定范围。1-9九个数,取其中三个不同的数组成的三位数最大是987,最小是123。

因为123>121(=11*11),144=12*12,4出现两次不符合条件,169=13*13,符合条件。所以一个数的平方最小是169,那么这个数是13。同理,得出大概的最大数为32。经过三次循环,可以得到三个三位数的不同结果集合。

2.       判断三个三位数是否是符合条件的数字。在这里将数字的比较转换成字符串的比较。

比如:

           num1 = 361 , num2 = 529 , num3 = 784,

符合条件的几个数字组合成字符串, 然后排序。排序后的结果如果是“123456789”, 那就是我们想要的。



最终只有一个唯一解:361, 529 , 784



具体的JAVA程序如下:


import java.text.MessageFormat;

import java.util.Arrays;

 

/**

 * 题目:1-9,9个数组成三个三位数,且都是完全平方数(三个三位数 占据 9个数)

 * 

 * 最终唯一解 361, 529 , 784

 * 

 * @author Eric

 * 

 */

 

public class FindNumbers {

 

    /**

     * 定义一个输出三个数字的模板

     */

    private static final String MESSAGE_FORMAT_PATTERN = "符合条件的三个数:"

           + "{0}, {1} , {2}";

 

    /**

     * 符合条件的字符数组。

     */

    private static final char[] TARGET_CHARACTERS = convertToCharArray(123456789);

 

    private StringBuilder sb = new StringBuilder();

 

    public void execute() {

       /**

        * 标记是否找到需要的数字集合

        */

       boolean found = false;

       /**

        * 1. 选择最小的值:123>121(=11*11),144=12*12,4出现两次不符合条件,169=13*13,所以最小只能是13

         * 2. (1到9)中不同数字组合的三位数最大987, A*A<=987, 大概取值为33

        * 三次循环比较数字是否是想要的。

        */

       for (int num1 = 13; num1 < 33; num1++) {

           for (int num2 = num1 + 1; num2 < 33; num2++) {

              for (int num3 = num2 + 1; num3 < 33; num3++) {

                  /**

                   * 如果数字符合条件,将found标记为true,并且打印出结果。

                   */

                  if (isCandidateNumbers(num1 * num1, num2 * num2, num3

                         * num3)) {

                     found = true;

                     print(num1 * num1, num2 * num2, num3 * num3);

                  }

              }

           }

       }

       /**

        * 如果没有找到,则直接输出“没有找到副歌条件的数字”

        */

       if (!found) {

           System.out.println("没有找到符合条件的数字!");

       }

    }

 

    /**

     * 判断是否是符合条件的组合。

     */

    private boolean isCandidateNumbers(int num1, int num2, int num3) {

       sb.setLength(0);

       sb.append(num1).append(num2).append(num3);

       char[] array = sb.toString().toCharArray();

       sortCharArray(array);

       return Arrays.equals(array, TARGET_CHARACTERS);

    }

 

    /**

     * 将数字转换成char数组的格式

     */

    private static char[] convertToCharArray(int value) {

       return String.valueOf(value).toCharArray();

    }

 

    /**

     * 对char数组进行排序

     */

    private void sortCharArray(char[] array) {

       Arrays.sort(array);

    }



    /**

     * 打印出符合条件的数字组合

     */

    private void print(int num1, int num2, int num3) {

       System.out.println(MessageFormat.format(MESSAGE_FORMAT_PATTERN, num1,

              num2, num3));

    }
    public static void main(String[] args) {

       FindNumbers fn = new FindNumbers();

       fn.execute();

    }

}

打印结果:

符合条件的三个数:361, 529 , 784
分享到:
评论

相关推荐

    C++第6课多重循环.ppt

    1. 水仙花数:水仙花数是指一个三位数,其各位数字的立方和等于该数本身。例如,153就是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。我们可以使用三重循环来找出所有三位水仙花数。外层循环控制百位数(1到9),中间...

    经典c程序100例.doc

    由于三位数是由三位独立的数字构成,因此直接使用逗号分隔输出每个数字即可。 #### 程序2:根据企业利润计算奖金 **知识点概述:** 本程序根据企业的利润规模,按照不同的提成比例计算应发放的奖金总额。涉及数值...

    循环结构练习题(2).docx

    3. **形如aabb的四位完全平方数**: 这个问题涉及到对四位数的遍历和回文数的检测。首先,我们需要一个函数来检查一个数是否为回文数,然后用`for`循环遍历所有四位数,检查其形式以及是否为完全平方数。 4. **...

    最新JAVA编程题全集

    斐波那契数列是一个经典的数学概念,其中每个数字是前两个数字的和,通常从0和1开始。在题目描述中,兔子繁殖的问题实际上就是斐波那契数列的应用实例。每个月兔子的数量遵循斐波那契数列的增长模式,即从第3个月...

    C语言经典编程24例【必看】.pdf

    * 程序1:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数? * 程序2:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? * 程序3:输入三个整数x、y、z,请...

    经典C语言源程序100例

    3. **输出格式**:`printf("%d,%d,%d\n",i,j,k)`用于打印出符合条件的三位数,每个数字之间用逗号分隔,换行符`\n`用于新行。 【程序 2】的知识点: 1. **条件分支结构**:程序通过一系列`if...else if...`语句...

    小学奥数组合问题.doc

    3. 完全平方公式应用:在计算握手次数时,利用组合公式C(n, 2) = n(n-1)/2,可以得到总握手次数。例如,6个人握手,总共握手次数为C(6, 2)。 4. 鸽巢原理(也称为抽屉原理):当物品数量超过容器数量时,至少有一个...

    江苏省泰州中学附属初级中学2016届九年级数学第二次模拟试题(无答案).doc

    5. **统计学概念**:众数是一组数据中出现次数最多的数值,中位数是将数据从小到大排列后处于中间位置的数值。统计表提供了成绩分布情况,需要找出哪个成绩出现频率最高以及成绩的中点。 6. **油耗计算**:根据提供...

    经典C程序100练习

    该程序旨在生成所有可能的三位数,其中每个数字(1, 2, 3, 4)在百位、十位、个位各出现一次,且不允许重复。程序通过三重循环实现,i、j、k分别代表百位、十位、个位的数字。`if (i!=k&&i!=j&&j!=k)`用于检查三个...

    30道编程题.ppt

    22. 完全平方数之和:找到一个整数,使得它加100和加168后都是完全平方数。 23. 水仙花数:找出所有三位数的水仙花数,即数字立方和等于数本身的数。 24. 完数查找:找出1000以内所有完数,即等于其因子和的数。 ...

    C语言程序设计经典题100道.doc

    给定一个数,加上100后是完全平方数,再加168仍然是完全平方数。为了解决这个问题,可以通过遍历整数范围并检查平方根是否符合条件来找到答案。 第四道题目涉及日期和日历算法。根据用户输入的年、月、日,程序需要...

    C语言初学者必懂的100个范例程序.doc

    **程序1**:此程序用于计算1、2、3、4四个数字可以组成的互不相同且无重复的三位数。它使用了三层循环(for循环)来遍历所有可能的组合,并通过条件判断(if语句)确保三位数字不重复。这是对数组和循环控制的基本...

    c语言10个经典小程序

    题目要求利用1、2、3、4这四个数字生成所有可能的不同组合,并且这些组合不能包含重复数字的三位数。 **程序分析:** 为了生成所有不重复的三位数,可以采用三层循环来分别处理百位、十位和个位数字的选择。由于每...

    整式概念及幂的运算.doc

    此外,代数式可以用来表示实际问题,如三位数的表示、平方和的代数表达、商品的定价策略、植树活动的工作分配,甚至图形的面积计算。通过理解和掌握整式与幂的运算,我们可以更有效地解决这些问题。 最后,了解整数...

    经典C语言习题100例

    程序通过循环遍历10万以内的整数,计算每个数加上100和168后的平方根,判断是否为完全平方数。C语言提供了丰富的标准库函数,方便进行各种数学计算。 4. **日期处理与闰年判断**: - 程序4处理的是日期转换问题。...

    经典 C语言程序 设计

    题目要求利用数字1、2、3、4组成所有可能的互不相同且无重复数字的三位数,并计算出总数。 **程序分析:** 为了生成所有不重复的三位数,可以采用三层循环来分别处理百位、十位和个位数字的选择。由于每个位置上的...

    java循环思维训练

    - **问题描述**:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?并列出这些数字。 - **解决思路**:使用三层嵌套的 `for` 循环来生成所有可能的三位数,并排除重复数字的组合。 - **关键...

Global site tag (gtag.js) - Google Analytics