1056 组合数的和 (15分)
原题链接:传送门
一、题目:
输入样例 1:
3 2 8 5
输出样例 1:
330
二、解析:
思路1:
输入的数字求和,然后带入公式即可
看到别人有这种简单的公式解法:https://blog.csdn.net/piaoliangjinjin/article/details/85066101
公式推导过程:
- 2 ,5,8 这3个数,组合出:
25、28、52、58、82、85
=20+5+20+8+50+2+50+8+80+2+80+5
=(2+5+8+20+50+80) * 2
=(2+5+8+2 * 10+5 * 10+8 * 10) * 2
=(2* 1+5 * 1+8 * 1+2 * 10+5 * 10+8 * 10)* 2
=(2+5+8) * 11 * 2
=(2+5+8) * 11 * (3-1) - 推出 ==> (各个数和) * 11 * (N-1)
AC代码1(简单公式):
import java.util.Scanner;
/**
* 1056 组合数的和 (15分)
*
* @思路:输入的数字求和,然后带入公式即可
* @参考:https://blog.csdn.net/piaoliangjinjin/article/details/85066101
* @author: ChangSheng
* @date: 2019年12月30日 下午2:50:26
*/
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int N = s.nextInt(),sum = 0;
for (int i = 0; i < N; i++) sum += s.nextInt();
System.out.print(sum * 11 * (N - 1));
}
}
思路2:
将输入的数字全部遍历一遍,组合求和
AC代码2:
import java.util.Scanner;
/**
* 1056 组合数的和 (15分)
*
* @思路:将输入的数字全部遍历一遍,组合求和
* @author: ChangSheng
* @date: 2019年12月30日 下午2:50:26
*/
public class Main {
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int N = s.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = s.nextInt();
}
int sum = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (i == j) continue;
String splice = String.valueOf(arr[i]) + String.valueOf(arr[j]);
sum += Integer.valueOf(splice);
}
}
System.out.print(sum);
}
}