pat1056 组合数的和 (15分)

给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。

输入格式:

输入在一行中先给出 N(1 < N < 10),随后给出 N 个不同的非 0 个位数字。数字间以空格分隔。

输出格式:

输出所有可能组合出来的2位数字的和。

输入样例:

3 2 8 5

输出样例:

330
分析:只有两位的整数,个位和十位,注意:不要掉入题目的思维陷阱(出题有点阴啊233),题目说所以组合出来的数的和,很容易误导人去想排列出所有结果然后加起来,呕吼,如果掉到这个坑就shit了。且看规律打法,如:
2,5,8,可以组合出:25、28、52、58、82、85,他们的和大家都会求,但是恰恰是利用了加法的基本原则,且看25+28+52+58+82+85=20*2+50*2+80*2+(5+8)+(2+8)+(2+5)=(20+50+80)*2+(2+5+8)*2,看出来没鸭?
每个数字当10位可以当3-1=2次,当个位也是3-1=2次,所有最后的和就=(20+50+80)*2+(2+5+8)*2,再化简=(2+5+8)*10*2+(2+5+8)*2=(2+5+8)*2*11,总结公式:输入n个数 sum为n个数的和 则最后的答案=sum*(n-1)*11
赶紧AC这个小阴货
代码:
#include<iostream>
using namespace std;
int main()
{
	int n;
	while (cin >> n)
	{
		int x, ans,sum = 0;
		int t = n;
		while (t--)
		{
			cin >> x;
			sum += x;
		}
		ans = (n - 1) * 11 * sum;
		cout <<ans<<endl;
	}
	return 0;
}


代码学习笔记 文章被收录于专栏

学习笔记,pat,牛客

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务