从集合{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
分享到:
相关推荐
对于0-9数字的识别,这意味着我们要为每个数字建立一个独立的HMM模型,并通过大量标注的语音数据调整模型参数,使其能有效地表示每个数字的发音模式。 项目中的"cdhmm"可能是指HMM模型的实现代码库或者数据集。代码...
八进制由0-7这8个数字组成,每3位二进制对应一位八进制;十六进制由0-9和A-F(代表10-15)组成,每4位二进制对应一位十六进制。 5. **数字系统的分析与设计**:在理解和掌握上述基础知识后,我们需要学会如何分析和...
如正确答案为5543,猜的人猜5255,则在这里不能认为猜测的第一个5对正确答案第二个,根据最优结果为准的原理和每个数字只能有一次的规则,两个比较后应该为1A1B,第一个5位子正确,记为1A;猜测数字中的第三个5或...
"三位数抽奖机"是一个基于数字滚动的简单抽奖程序,主要设计用于生成三位数的随机号码,以实现公平且有趣的抽奖活动。以下是对这个程序及其功能的详细解释: 1. **随机数生成**:该抽奖机的核心功能是生成三位数的...
对于三位数,可以发现每四个连续的三位数中,只有一个数的数字和是4的倍数。因此,在1000到4999之间有1000/4 = 1000个符合条件的数。对于两位数,每四个数中也有一个符合条件。所以在999到600之间有100个,599到200...
/\d{3}|[a-z]{4}/ 匹配的是要么是一个三位数,要么是四个小写字母.在正则表达式中括号具有几种作用.它的主要作用是把单独的项目分组 成子表达式,以便可以像处理一个独立的单元那种用 *、+或? 来处理那些项目.例如:...
在Python中,所有数据类型都被视为类,而每一个数据值都是这些类的一个实例。Python支持六种基本的数据类型,具体包括: - **数字**:用于表示数学中的数字。 - **字符串**:用于表示文本序列。 - **列表**:一种...
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寸数码管"指的是这种数码管可以显示从单个数字到四个数字的组合,通常用于显示简单的数值或状态信息。 数码管,也称为七段显示器,是由七个独立的发光二极管段组成的,通过不同的亮段组合可以显示...
阿拉伯数字是目前国际上广泛使用的数字系统,包括0-9这十个数字,而中文数字则是用中文字符来表示数量的方式,如一、二、三至零、壹、贰、叁等。在金融和会计领域,中文数字的使用可以增加数据的可读性和正规性,...
课堂练习涉及了用列举法和描述法表示不同特征的集合,如绝对值小于3的所有整数、在平面直角坐标系中以原点为圆心的点的集合、所有奇数组成的集合以及由数字1、2、3组成的所有三位数的集合。这些练习旨在加深对集合...
- (3)“较大的数”不是一个集合,因为它没有明确的界限。 - (4)"young"中的字母构成集合,元素是y、o、u、n、g。 - (5)“大于2的数”是一个无限集,用描述法表示为{x|x>2}。 - (6)“小于3的正数”也是一个...
- **链式存储**:使用链表的形式存储线性表中的元素,每个结点除了包含自身的信息外,还包含指向下一个结点的指针。优点是插入和删除操作方便,缺点是存取效率较低,需要遍历链表。 #### 65. 在顺序循环队列中,...
通过本文的介绍,我们可以看到PL/SQL中的集合类型提供了丰富的功能,可以根据不同的需求选择合适的类型来实现高效的数据管理和操作。无论是关联数组的灵活性、嵌套表的动态扩展能力还是变长数组的固定结构,都能满足...
- 实现思路:使用哈希表存储每个数及其索引,便于快速查找补数。 - **2.1.8 3Sum** - 在数组中找到三个数之和等于零的所有组合。 - 实现思路:首先对数组排序,然后固定一个数,使用双指针法查找另外两个数。 -...
4. 第四题同样涉及组合,计算无重复数字的三位数减去有重复数字的三位数的数量。 5. 第五题是排列问题,首先固定两位父亲的位置,然后安排其余四位成员,考虑到两个孩子要相邻,可以视为一个整体。 6. 第六题是...
2. **函数**:C语言的核心是函数,每个小程序通常由一个或多个函数构成。理解函数定义、参数传递、返回值以及如何调用函数是学习C语言的关键。 3. **输入/输出操作**:stdio库提供了标准输入输出功能,如`printf`...