1056 组合数的和 (15分) (最简方式 - 推导公式)(Java 题解)

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);
	}
}

相关

PAT - 乙级 - 题解集

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值