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

从集合{1-9}中选择9个数字,每3个数字形成一个三位数,每个数字只允许使用一次。最后的要求是三个三位数的比值为1:2:3。

    博客分类:
  • Java
 
阅读更多
从集合{1-9}中选择9个数字,每3个数字形成一个三位数,每个数字只允许使用一次。最后的要求是三个三位数的比值为1:2:3。如何查找出这样的组合?

分析:
1. 首先,确定第一个数字的范围,最小是123,最大是987/3 = 329
2. 其次,确定怎么判断三个数字是符合条件的。这里比较巧妙的就是将数字的比较转换成字符串的比较。比如:
           num1 = 192 , num2 = 384 , num3 = 576,
符合条件的几个数字组合成字符串, 然后排序。排序后的结果如果是“123456789”, 那就是我们想要的。

这样的组合一共有四组:
num1 = 192 , num2 = 384 , num3 = 576
num1 = 219 , num2 = 438 , num3 = 657
num1 = 273 , num2 = 546 , num3 = 819
num1 = 327 , num2 = 654 , num3 = 981

根据这样的思想,编写程序实现如下:
import java.util.Arrays;
/**
 * 从集合{1-9}中选择9个数字,每3个数字形成一个三位数,每个数字只允许使用一次。
 * 最后的要求是三个三位数的比值为1:2:3。如何查找出这样的组合?
 * 
 * 分析:
1. 首先,确定第一个数字的范围,最小是123,最大是987/3 = 329
2. 其次,确定怎么判断三个数字是符合条件的。这里比较巧妙的就是将数字的比较转换成字符串的比较。比如:
           num1 = 192 , num2 = 384 , num3 = 576,
符合条件的几个数字组合成字符串, 然后排序。排序后的结果如果是“123456789”, 那就是我们想要的。
 * @author Eric
 * 
 */
public class FindNumbers {
 /**
  * 符合条件的字符数组。
  */
 private static final char[] TARGET_CHARACTERS = convertToCharArray(123456789);
 
 private StringBuilder sb = new StringBuilder();
 public void execute() {
  for (int num1 = 123; num1 <= 329; num1++) {
   if (isCandidateNumber(num1)) {
    print(num1);
   }
  }
 }
 /**
  * 判断是否是符合条件的组合。
  */
 private boolean isCandidateNumber(int num1) {
  sb.setLength(0);
  sb.append(num1).append(2 * num1).append(3 * num1);
  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) {
  System.out.print("num1 = " + num1);
  System.out.print(" , ");
  System.out.print("num2 = " + num1 * 2);
  System.out.print(" , ");
  System.out.print("num3 = " + num1 * 3);
  System.out.println();
 }
 public static void main(String[] args) {
  new FindNumbers().execute();
 }
}

程序运行的结果:
num1 = 192 , num2 = 384 , num3 = 576
num1 = 219 , num2 = 438 , num3 = 657
num1 = 273 , num2 = 546 , num3 = 819
num1 = 327 , num2 = 654 , num3 = 981
分享到:
评论

相关推荐

    hmm的实现0-9数字的训练和识别

    对于0-9数字的识别,这意味着我们要为每个数字建立一个独立的HMM模型,并通过大量标注的语音数据调整模型参数,使其能有效地表示每个数字的发音模式。 项目中的"cdhmm"可能是指HMM模型的实现代码库或者数据集。代码...

    数字电子技术基础简明教程课后习题答案(余孟尝)

    八进制由0-7这8个数字组成,每3位二进制对应一位八进制;十六进制由0-9和A-F(代表10-15)组成,每4位二进制对应一位十六进制。 5. **数字系统的分析与设计**:在理解和掌握上述基础知识后,我们需要学会如何分析和...

    猜数字游戏 (C#)

     如正确答案为5543,猜的人猜5255,则在这里不能认为猜测的第一个5对正确答案第二个,根据最优结果为准的原理和每个数字只能有一次的规则,两个比较后应该为1A1B,第一个5位子正确,记为1A;猜测数字中的第三个5或...

    三位数抽奖机

    "三位数抽奖机"是一个基于数字滚动的简单抽奖程序,主要设计用于生成三位数的随机号码,以实现公平且有趣的抽奖活动。以下是对这个程序及其功能的详细解释: 1. **随机数生成**:该抽奖机的核心功能是生成三位数的...

    33计数综合(二)[参照].pdf

    对于三位数,可以发现每四个连续的三位数中,只有一个数的数字和是4的倍数。因此,在1000到4999之间有1000/4 = 1000个符合条件的数。对于两位数,每四个数中也有一个符合条件。所以在999到600之间有100个,599到200...

    正则表达式

    /\d{3}|[a-z]{4}/ 匹配的是要么是一个三位数,要么是四个小写字母.在正则表达式中括号具有几种作用.它的主要作用是把单独的项目分组 成子表达式,以便可以像处理一个独立的单元那种用 *、+或? 来处理那些项目.例如:...

    【Python学习笔记】第三章 数字类型的数据.pdf

    在Python中,所有数据类型都被视为类,而每一个数据值都是这些类的一个实例。Python支持六种基本的数据类型,具体包括: - **数字**:用于表示数学中的数字。 - **字符串**:用于表示文本序列。 - **列表**:一种...

    java 位操作集合以及应用技巧

    2. 按位或(|):两个操作数对应位至少有一个为1时,结果位为1,否则为0。 3. 按位异或(^):两个操作数对应位相同时结果位为0,不同时为1。 4. 按位非(~):对操作数的每一位取反,0变1,1变0。 5. 左移():将操作数的...

    数字的表示

    更一般地,对于一个n+1位的十进制数,其表示为: \[(a_na_{n-1}a_1a_0) = a_n \times 10^n + \cdots + a_1 \times 10^1 + a_0 \times 10^0\] 其中\(a_k\)是自然数,且满足\(0 \leq a_k )。这里,10作为基数可以被...

    1-4位0.8寸数码管PCB封装库(AD库,封装带3D视图)

    标题中的"1-4位0.8寸数码管"指的是这种数码管可以显示从单个数字到四个数字的组合,通常用于显示简单的数值或状态信息。 数码管,也称为七段显示器,是由七个独立的发光二极管段组成的,通过不同的亮段组合可以显示...

    阿拉伯数据转简(繁)体金额中文.zip

    阿拉伯数字是目前国际上广泛使用的数字系统,包括0-9这十个数字,而中文数字则是用中文字符来表示数量的方式,如一、二、三至零、壹、贰、叁等。在金融和会计领域,中文数字的使用可以增加数据的可读性和正规性,...

    高中数学集合的概念课件人教版必修一PPT课件.pptx

    课堂练习涉及了用列举法和描述法表示不同特征的集合,如绝对值小于3的所有整数、在平面直角坐标系中以原点为圆心的点的集合、所有奇数组成的集合以及由数字1、2、3组成的所有三位数的集合。这些练习旨在加深对集合...

    数据结构题

    - **链式存储**:使用链表的形式存储线性表中的元素,每个结点除了包含自身的信息外,还包含指向下一个结点的指针。优点是插入和删除操作方便,缺点是存取效率较低,需要遍历链表。 #### 65. 在顺序循环队列中,...

    第1章集合第1节集合的含义与表示.doc

    - (3)“较大的数”不是一个集合,因为它没有明确的界限。 - (4)"young"中的字母构成集合,元素是y、o、u、n、g。 - (5)“大于2的数”是一个无限集,用描述法表示为{x|x&gt;2}。 - (6)“小于3的正数”也是一个...

    PL-SQL集合与记录

    通过本文的介绍,我们可以看到PL/SQL中的集合类型提供了丰富的功能,可以根据不同的需求选择合适的类型来实现高效的数据管理和操作。无论是关联数组的灵活性、嵌套表的动态扩展能力还是变长数组的固定结构,都能满足...

    leetcode-cpp刷题

    - 实现思路:使用哈希表存储每个数及其索引,便于快速查找补数。 - **2.1.8 3Sum** - 在数组中找到三个数之和等于零的所有组合。 - 实现思路:首先对数组排序,然后固定一个数,使用双指针法查找另外两个数。 -...

    【金版新学案】2014-2015学年高中数学 阶段质量评估1(含解析)新人教A版选修2-3

    4. 第四题同样涉及组合,计算无重复数字的三位数减去有重复数字的三位数的数量。 5. 第五题是排列问题,首先固定两位父亲的位置,然后安排其余四位成员,考虑到两个孩子要相邻,可以视为一个整体。 6. 第六题是...

    C 语言小程序

    2. **函数**:C语言的核心是函数,每个小程序通常由一个或多个函数构成。理解函数定义、参数传递、返回值以及如何调用函数是学习C语言的关键。 3. **输入/输出操作**:stdio库提供了标准输入输出功能,如`printf`...

Global site tag (gtag.js) - Google Analytics