solution.md 2.4 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1
# 倍数问题
F
fix bug  
feilong 已提交
2

3
**题目描述**
F
fix bug  
feilong 已提交
4

每日一练社区's avatar
每日一练社区 已提交
5 6
众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一定有解。

7
**输入格式**
F
fix bug  
feilong 已提交
8

每日一练社区's avatar
每日一练社区 已提交
9 10 11 12
从标准输入读入数据。
第一行包括 2 个正整数 n, K。
第二行 n 个正整数,代表给定的 n 个数。

13
**输出格式**
F
fix bug  
feilong 已提交
14

每日一练社区's avatar
每日一练社区 已提交
15 16 17
输出到标准输出。
输出一行一个整数代表所求的和。

18
**样例输入**
F
fix bug  
feilong 已提交
19

每日一练社区's avatar
每日一练社区 已提交
20 21 22 23 24
```
4 3
1 2 3 4
```

25
**样例输出**
F
fix bug  
feilong 已提交
26

每日一练社区's avatar
每日一练社区 已提交
27 28 29 30
```
9
```

31
**样例解释**
F
fix bug  
feilong 已提交
32

每日一练社区's avatar
每日一练社区 已提交
33 34 35 36 37
```
选择2、3、4。
```

## aop
F
fix bug  
feilong 已提交
38

每日一练社区's avatar
每日一练社区 已提交
39
### before
F
fix bug  
feilong 已提交
40

每日一练社区's avatar
每日一练社区 已提交
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
```cpp
#include <bits/stdc++.h>
#include <string>
#include <queue>
#include <set>
#include <cstring>
#include <cmath>
#include <algorithm>
#define MAX 1000000000
using namespace std;
int n, k, a[100010];
int b[4];
int flag = 0;
```
### after
F
fix bug  
feilong 已提交
56

每日一练社区's avatar
每日一练社区 已提交
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
```cpp
int main()
{
	cin >> n >> k;
	a[0] = MAX;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	sort(a + 1, a + n + 1);
	reverse(a + 1, a + n + 1);
	dfs(a, n, 1);
	return 0;
}
```

## 答案
F
fix bug  
feilong 已提交
72

每日一练社区's avatar
每日一练社区 已提交
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
```cpp
void dfs(int a[], int n, int s)
{
	if (flag == 1)
		return;
	if (s == 4)
	{
		int sum = b[1] + b[2] + b[3];
		if (sum % k == 0)
		{
			flag = 1;
			cout << sum << endl;
		}
		return;
	}
	for (int i = 1; i <= n; i++)
	{
		if (a[i] < a[s - 1])
		{
			b[s] = a[i];
			dfs(a, n, s + 1);
		}
	}
}
```
## 选项

F
fix bug  
feilong 已提交
100

每日一练社区's avatar
每日一练社区 已提交
101
### A
F
fix bug  
feilong 已提交
102

每日一练社区's avatar
每日一练社区 已提交
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
```cpp
void dfs(int a[], int n, int s)
{
	if (flag == 1)
		return;
	if (s == 4)
	{
		int sum = b[1] + b[2] + b[3];
		if (sum % k == 0)
		{
			flag = 1;
			cout << sum << endl;
		}
		return;
	}
	for (int i = 1; i <= n; i++)
	{
		if (a[i] < a[s - 1])
		{
			b[s] = a[i];
			dfs(a, n, s);
		}
	}
}
```

### B
F
fix bug  
feilong 已提交
130

每日一练社区's avatar
每日一练社区 已提交
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
```cpp
void dfs(int a[], int n, int s)
{
	if (flag == 1)
		return;
	if (s == 4)
	{
		int sum = b[1] + b[2] + b[3];
		if (sum % k == 0)
		{
			flag = 1;
			cout << sum << endl;
		}
		return;
	}
	for (int i = 1; i <= n; i++)
	{
		if (a[i] < a[s + 1])
		{
			b[s] = a[i];
			dfs(a, n, s + 1);
		}
	}
}
```

### C
F
fix bug  
feilong 已提交
158

每日一练社区's avatar
每日一练社区 已提交
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
```cpp
void dfs(int a[], int n, int s)
{
	if (flag == 1)
		return;
	if (s == 4)
	{
		int sum = b[1] + b[2] + b[3];
		if (sum % k == 0)
		{
			flag = 1;
			cout << sum << endl;
		}
		return;
	}
	for (int i = 1; i <= n; i++)
	{
		if (a[i] < a[s + 1])
		{
			b[s] = a[i];
			dfs(a, n, s);
		}
	}
}
```