求正数数组的最小不可组成和_分解因数
【摘要】 求正数数组的最小不可组成和求正数数组的最小不可组成和import java.util.*;public class Solution { /** * 正数数组中的最小不可组成和 * 输入:正数数组arr * 返回:正数数组中的最小不可组成和 */ public void getNumber(int[] arr,ArrayList<Integer> result,int pos...
求正数数组的最小不可组成和
import java.util.*;
public class Solution {
/**
* 正数数组中的最小不可组成和
* 输入:正数数组arr
* 返回:正数数组中的最小不可组成和
*/
public void getNumber(int[] arr,ArrayList<Integer> result,int pos,int sum){
if(pos==arr.length){
return;
}
for(int i = pos;i<arr.length;i++){
sum += arr[i];
result.add(sum);
getNumber(arr,result,i+1,sum);
sum -= arr[i];
}
}
public int getFirstUnFormedNum(int[] arr) {
//2种情况: 1.[min,max] 有正数不能被子集相加得到! 返回该 数
// 2.[min,max] 所以正数都能被子集相加得到 返回 max+1
Arrays.sort(arr);
int min = arr[0];
int max = arr[0];
ArrayList<Integer> result = new ArrayList<>();
getNumber(arr,result,0,0);
for(int i = 1;i<arr.length;i++){
max += arr[i];
}
for(int i = min+1;i<max;i++){
if(!result.contains(i)){
return i;
}
}
return max+1;
}
}
分解因数
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
StringBuilder result = new StringBuilder();
int num = sc.nextInt();
int count = 0;
result.append(num + " " + "=");
int j = num;
for (int i = 2;i<=Math.sqrt(j);i++) {//找出素数因数!
while (num % i == 0) {//说明是因数!
result.append(" "+i+" "+"*");//添加到结果中!
num = num/i; //进一步分解!
count++; //记录因数个数!
}
if (num == 1) break;//num为1不需要分解!
}
if (num != 1) result.append(" "+ num);//不为1说明因数就是它本身!
if (result.charAt(result.length()-1) == '*') {//将最后的*和空格删除!
result.deleteCharAt(result.length()-1);
result.deleteCharAt(result.length()-1);
}
System.out.println(result);
//result.setLength(0);//设置字符序列的长度! 相当于置空!
}
}
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)