根据linux的权限4(read),2(write),1(x),就想可以给任意一个开始的数,求一个类似于linux权限的数据列,这些数列有这些特点:这些数不管几个相加的值或着单个的数都不会重复。就如1,2,4,8这个数列,可以产生的值有,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15这些值,反过来,如果拿出来一个值7那么就能在这个数列里找到唯一的是哪几个数相加的值,比如7就一定是1+2+4的值不会是别的。
于是写了一个类,给出一个开始数,然后找到一个类似于上面的一个数列。
类如下,这里只找到10000。
用这个虽然可以找到任意开始值的这么一个数列,但是总感觉这样计算太消耗内存,效率太低,总认为可以像数学上那样可以找到一个通项工式,就像有前面一个数就可以根据这个工式得到他的下一项,这样不会消耗内存效率也高,可是研究来研究去也没有找到这样的一个工式,不过发现不管从几开始,到一定的程序下一个数就是前面一个数的2倍,关键是不知道从何时开始会出现这个规律,数越大,这个规律出现的越迟。
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class TestS {
public static void main(String []args){
printNumbers(1);
}
public static Set<Integer> printNumbers(Integer startNumber){
Set<Integer> resultSet = new HashSet<Integer>();
Set<Integer> resultSet1 = new HashSet<Integer>();
Set<Integer> numbersSet = new HashSet<Integer>();
for(int i = startNumber ; i < 10000 ; i ++){
if(!resultSet.contains(i)){
boolean flag = true;
for(Integer j : resultSet){
if(resultSet.contains(j + i)){
flag = false;
break;
}
}
if(!flag){
continue;
}
for(Integer j : resultSet){
resultSet1.add(j+i);
}
numbersSet.add(i);
resultSet.add(i);
if(resultSet1 != null && resultSet1.size() > 0){
resultSet.addAll(resultSet1);
resultSet1.clear();
}
System.out.print(i + "----");
printSet(numbersSet);
System.out.print("----");
printSet1(resultSet);
}
}
// printSet(numbersSet);
return numbersSet;
}
public static void printSet(Set<Integer> setObj){
Set<Integer> numberTreeSet = new TreeSet<Integer>(setObj);
for(Integer i : numberTreeSet){
System.out.print(i+",");
}
}
public static void printSet1(Set<Integer> setObj){
Set<Integer> numberTreeSet = new TreeSet<Integer>(setObj);
for(Integer i : numberTreeSet){
System.out.print(i+",");
}
System.out.println("#############");
}
}
}
分享到:
相关推荐
同样的,0乘以任何数也等于0,因为0表示没有,所以0乘以任何数表示没有几个数相加,结果自然是0。例如,0×7=0,7×0=0。这一特性在实际应用中非常关键,如在统计物品数量时,如果有0个,那么其总和就是0。 在教学...
例如,可以将整十数加一位数视为几个十和几个一的组合,而减法则理解为从几十几中减去几个十或几个一。 5. **找规律填数**:在这一环节,学生需要观察并找出数字间的规律,例如,可能需要两两、三三、五五或十十个...
找出数字间的规律是关键,可以通过两两、三三、五五或十十地数来发现规律。 易错点4:数的大小比较。比较时,先比较高位,高位相同则比较低位,避免混淆比较方法。 ### 第四单元:口算和实际问题解决 易错点1:...
- 还有一些问题要求学生找到数字之间的关系,比如找出两个数之间的数,或找出比某个数多或少1的数。 7. **数的排序**: - 学习如何根据数值大小将数字进行排序,从大到小或从小到大排列。 8. **应用实践**: - ...
通过填空练习,学生需要计算出不同边长的正三角形的数量,如边长为1cm、2cm、3cm和4cm的正三角形各有几个,然后将这些数字相加,得到总数。 探究三则引入了三角形计数的更复杂情况,学生需要理解三角形数量与图形...
- 加数 + 加数 = 和:两个或多个数相加的结果。 - 和 - 一个加数 = 另一个加数:用于找出未知的加数。 - 被减数 - 减数 = 差:减法运算的结果。 - 被减数 - 差 = 减数:找到减数。 - 差 + 减数 = 被减数:通过...
- 加数+加数=和:两个数相加得到和。 - 和-一个加数=另一个加数:求出未知的加数。 - 被减数-减数=差:减法的基本运算。 - 被减数-差=减数:找到减数。 - 差+减数=被减数:还原被减数。 6. **乘法和...
在求解方程时,需要找到一个或多个未知数的值,使等式成立,这样的值被称为方程的解。解方程时会用到等式的性质,包括等式两边同时加上或减去相同的数,等式仍然成立;等式两边同时乘以或除以相同的非零数,等式同样...
5. **数字排列**:题目要求用1、8、5三个数字组成两位数,并找出最大和最小的数,这涉及到数字的排列顺序及其对数值的影响。 6. **数位差异**:找一个在60和80之间的数,个位和十位相差3,这个问题需要孩子理解数位...
- **加数+加数=和**:加法的基本概念,两个数相加得到和。 - **和-一个加数=另一个加数**:找到未知的加数。 - **被减数-减数=差**:减法的基本概念,被减数减去减数等于差。 - **被减数-差=减数**:解...
- 加数+加数=和:基本的加法原理,两个或多个数相加得到总和。 - 和-一个加数=另一个加数:求解未知的加数。 - 被减数-减数=差:减法运算,找出两数相减的结果。 - 被减数-差=减数:已知被减数和差,求...
第五题要求将50元面额的人民币兑换成10元或20元的零钱,找出所有可能的组合。这可以通过设置未知数来计算不同面额纸币的数量来解决。 6. 追及问题通常与代数方程组相关。第六题中,甲乙两人的速度和距离构成了两个...
【例5】通过两个加法等式,找出其中的增量,求解△的值。 【例6】同样通过两个等式,结合平均数的概念,求解△。 【例7】实际应用问题,通过价格的等式关系求解每支铅笔的价格。 【例8】多变量的和差问题,求解未知...
17. **和-一个加数=另一个加数**:知道和和其中一个加数,可以找出另一个加数。 18. **被减数-减数=差**:减法的概念,被减数减去减数等于差。 19. **被减数-差=减数**:逆运算,从被减数中减去差,得到减数。 20. *...
5. 当我们需要找出一系列分数,这些分数大于 但小于 时,我们可以考虑将这两个分数之间的分数进行列举。例如, 和 之间的分数可以有 , , 等等,只要保证每个分数的分子大于 的分子且小于 的分子,同时分母相同。 ...
【知识点解析】 1. 近似数:题目中提到"这个六位数的近似数是...这些知识点覆盖了小学三年级数学的基础内容,包括数的认识、运算规则、几何概念、单位换算、问题解决等,这些都是学生在学习过程中需要掌握的核心技能。
- **积÷一个因数=另一个因数**:通过积和一个因数找出另一个因数。 - **被除数÷除数=商**:除法关系,被除数除以除数等于商。 - **被除数÷商=除数**:从被除数和商中找到除数。 - **商×除数=被除数**:通过...
试卷分为几个部分: 1. 计算小能手:这部分主要考察学生的加减法基础,如9+3=12,7-0=7等。题目设计涵盖了简单的单个数字相加、减以及连续加减的运算。 2. 填空题:考察学生对数字序列的理解和数字间关系的认识,...
1. 找出含有分率的关键句:在题目中,通常会有一句描述比例关系的句子,这句句子是解决问题的关键。 2. 确定单位“1”的量:单位“1”是问题中被比较或作为基础的量,通常由“的”字前或“比”字后的量来表示。 3. ...
`max()`函数找出列或行中的最大数值。 5. min:求最小值。`min()`函数则返回最小数值。 6. median:求中位数。中位数是数据排序后位于中间位置的数值,不受极端值影响,是衡量数据集中心趋势的稳健统计量。 这些...