给定 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

思路:
N < 10 400ms暴力就完事

题解一:

#include<iostream>

using namespace std;

int main() {
	ios::sync_with_stdio(false);
	int n;
	cin >> n;
	int *num = new int[n];
	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}
	int ans = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (i != j) ans += num[i] * 10 + num[j];
		}
	}
	cout << ans;
	
	return 0;
}

思路:
25、28、52、58、82、85
观察发现2、5、8十位/个位分别出现2次(3 - 1)
即,每个数字出现n - 1

题解二:

#include<iostream>

using namespace std;

int main() {
	ios::sync_with_stdio(false);
	int n, num, ans = 0;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> num;
		//           十位              个位
        ans += num * 10 * (n - 1) + num * (n - 1);
	}
	cout << ans;

	return 0;
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐