题解:B4283 [蓝桥杯青少年组省赛 2022] 分成整数
主要思路
考虑枚举。枚举分解出的前两个数
AC Code
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double db;
const int INT_INF = 0x3f3f3f3f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
inline ll _abs(ll a) { if (a < 0) return -a; return a; }
inline ll _pow(ll a, ll b) { ll x = 1, y = a; while(b > 0) {if (b & 1) x *= y; y *= y; b >>= 1; } return x; }
// ----------------------------
// ----------------------------
// ----------------------------
bool check(int x) {
while (x) {
if (x % 10 == 3 || x % 10 == 7) return false;
x /= 10;
}
return true;
}
int main() {
int n; cin >> n;
// ----------------------------
int k, ans = 0;
for (int i = 1; i < n - 1; i++) { // j,k 都至少为 1,所以 i 从 1 枚举到 n-2
if (!check(i)) continue;
for (int j = i + 1; j < n - i; j++) { // 同理,j 从 i+1 枚举到 n-i-1
k = n - i - j;
if (k > j && check(j) && check(k)) ans++;
}
}
// ----------------------------
cout << ans;
return 0;
}