1056 组合数的和 (15分) Java题解 PAT (Basic Level) Practice (中文)

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 P1056_ac_推到一个数学公式 {
	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 P1056_ac_数字字符拼接_______博客3 {
	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);
	}
}
发布了86 篇原创文章 · 获赞 104 · 访问量 6636

猜你喜欢

转载自blog.csdn.net/weixin_44034328/article/details/103788889