算式900-2017省赛
https://www.lanqiao.cn/problems/649/learning/
暴力dfs解决 答案是(6048-5973)*12=900
。
#include <iostream>
using namespace std;
int st[10];
int n[10];
void dfs(int u)
{
if(u > 9)
{
// 0 1 2 3
int a = n[0] * 1000 + n[1] * 100 + n[2] * 10 + n[3];
// 4 5 6 7
int b = n[4] * 1000 + n[5] * 100 + n[6] * 10 + n[7];
// 8 9
int c = n[8] * 10 + n[9];
if((a - b) * c == 900)
cout << a << ' ' << b << ' ' << c << endl;
}
else
{
for(int i = 0;i < 10;i ++)
{
if(st[i]) continue;
st[i] = true;
n[u] = i;
dfs(u + 1);
st[i] = false;
}
}
}
int main()
{
dfs(0);
return 0;
}
谈判
https://www.lanqiao.cn/problems/545/learning/
输入输出样例
示例 1
输入
4
9 1 3 5
输出
31
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 1010;
int b[N];
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> b[i];
sort(b, b + n);
int now = b[0] + b[1];
int sum = now;
for (int i = 2; i < n; i++)
{
now += b[i];
sum += now;
}
cout << sum << endl;
return 0;
}
幸运数-2013省赛
https://www.lanqiao.cn/problems/214/learning/
#include <algorithm>
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
bool l[N];
int idx[N];
void makeLucky() {
int index = 1;
for (int i = 1; i < 100; i++) {
if (l[i]) continue;
// 记录是第几个幸运数字
idx[i] = index++;
// 开始删除数字
int cnt = 0;
for (int j = i + 1; j < 1e6 + 5; j++) {
// 如果已经被删除了
if (l[j]) continue;
// 计数器
cnt++;
// 删除数字
if (cnt % idx[i] == 0) l[j] = true;
}
}
}
int main() {
int m, n;
cin >> m >> n;
makeLucky();
int cnt = 0;
for (int i = 0; i < N; i++) {
if (i >= n) break;
if (!l[i] && i >= m) cnt++;
}
for (int i = 1; i < 100; i++)
if (!l[i]) cout << i << ' ';
cout << cnt << endl;
return 0;
}
123-2021国赛
https://www.lanqiao.cn/problems/1591/learning/