1 条题解
-
0
1
#include <bits/stdc++.h> using namespace std; int len, d[15]; int cnt1(int x) { // 放在个位 len = 1; d[len - 1] = x; // 进位 while (d[len - 1] >= 2) { d[len] = d[len - 1] / 2; d[len - 1] %= 2; len++; } // 统计 1 的个数 int cnt = 0; for (int i = 0; i <= len - 1; i++) if (d[i] == 1) cnt++; return cnt; } int cnt0(int x) { len = 1; d[len - 1] = x; while (d[len - 1] >= 2) { d[len] = d[len - 1] / 2; d[len - 1] %= 2; len++; } int cnt = 0; for (int i = 0; i <= len - 1; i++) if (d[i] == 0) cnt++; return cnt; } int main() { int n; cin >> n; int ansA = 0, ansB = 0; for (int i = 1; i <= n; i++) { if (cnt1(i) > cnt0(i)) ansA++; else ansB++; } cout << ansA << " " << ansB << "\n"; return 0; }
2
#include <bits/stdc++.h> using namespace std; int len, d[15]; // 判断 x 在二进制下有几个 y int cnt(int x, int y) { len = 1; d[len - 1] = x; while (d[len - 1] >= 2) { d[len] = d[len - 1] / 2; d[len - 1] %= 2; len++; } int res = 0; for (int i = 0; i <= len - 1; i++) if (d[i] == y) res++; return res; } int main() { int n; cin >> n; int ansA = 0, ansB = 0; for (int i = 1; i <= n; i++) { if (cnt(i, 1) > cnt(i, 0)) ansA++; else ansB++; } cout << ansA << " " << ansB << "\n"; return 0; }
3
#include <bits/stdc++.h> using namespace std; // 判断 x 在二进制下有几个 y int cnt(int x, int y) { int res = 0; while (x > 0) { if (x % 2 == y) res++; x /= 2; } return res; } int main() { int n; cin >> n; int ansA = 0, ansB = 0; for (int i = 1; i <= n; i++) { if (cnt(i, 1) > cnt(i, 0)) ansA++; else ansB++; } cout << ansA << " " << ansB << "\n"; return 0; }
- 1
信息
- ID
- 8741
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 21
- 已通过
- 11
- 上传者