PAT-B-1056-组合数的和

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

输入格式:

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

输出格式:

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

输入样例:

1
3 2 8 5

输出样例:

1
330

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <vector>
using namespace std;
int _sum=0;
//递归法获得组合
void DFS(int index,vector<int>& nums,vector<bool>& used,int num,int product){
if(index==2){
_sum+=num;
return;
}

for (int i = 0;i < (int)nums.size();i++) {
if (!used[i]) {
used[i] = true;
DFS(index + 1, nums, used, num + nums[i] * product, product / 10);
used[i] = false;
}
}

}

int main(){
int n;
scanf("%d",&n);
vector<int> v(n);
vector<bool> used(n,false);
for(int i=0;i<n;i++)
scanf("%d",&v[i]);
DFS(0,v,used,0,10);
printf("%d\n",_sum);

return 0;
}

----\(˙<>˙)/----赞赏一下吧~