整体上来说,难度不大,第二题,第三题,第四题感觉就是在写流水账!没啥大难度!
第一题确实有点儿难度!
第一题:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
int[] arr = new int[N];
for (int i = 0;i<N;i++){
arr[i] = sc.nextInt();
}
int[] sss = new int[10000];
int len=arr.length;
int allCombinations=(1<<len)-1; //数组的所有组合数
//从1开始计算组合
for(int i=1;i<=allCombinations;i++){
int[] combinations=new int[len]; //保存该数字对应的组合
int curPosition=len-1; //当前所在位置,自后向前
int number=i;
while(number!=0){
//若最低位为1,则取该位置的元素
if((number&1)==1){
combinations[curPosition]=arr[curPosition];
}
number=number>>>1; //无符号右移去除低位
curPosition--; //记录下一位
}
int num = 0;
for (int a : combinations){
num += a;
}
sss[num]++;
}
int num = 0;
for (int a : arr){
num += a;
}