给定一个整数n 范围是1到1e12,从1到n中满足只有2,6,8,9四个数且每个数最少出现一次的数的个数是,用c++代码和容斥定理实现,不需要思路
时间: 2024-05-01 12:16:25 浏览: 10
```c++
#include <iostream>
using namespace std;
long long calc(long long x) {
long long res = 0;
for (int i = 1; i < (1 << 4); ++i) {
int cnt = 0, mul = 1;
for (int j = 0; j < 4; ++j) {
if ((1 << j) & i) {
cnt++;
mul *= (j == 0 ? 2 : (j == 1 ? 6 : (j == 2 ? 8 : 9)));
}
}
res += (cnt & 1) ? x / mul : -(x / mul);
}
return res;
}
int main() {
long long n;
cin >> n;
cout << calc(n) << endl;
return 0;
}
```
相关问题
给定一个整数n 范围是1到1e12,从1到n中满足只有2,6,8,9四个数且每个数最少出现一次的数的个数是,用c++代码实现,不需要思路
```c++
#include <iostream>
#include <cstring>
using namespace std;
bool check(long long x) {
bool num[10];
memset(num, false, sizeof(num)); // 初始化num数组
while (x) {
num[x % 10] = true; // 标记数字出现
x /= 10;
}
return num[2] && num[6] && num[8] && num[9]; // 判断是否符合条件
}
int main() {
long long n;
cin >> n;
int cnt = 0;
for (long long i = 1; i <= n; i++) {
if (check(i)) {
cnt++;
}
}
cout << cnt << endl;
return 0;
}
```
用c++实现给定一组整数,求其中的最大,最小,绝对值最大和绝对值最小的数。 第一行输入正整数n,表示输入的整数个数,2<=n<=100。 第二行是n个整数。 输出n个整数中的最大值,最小值,绝对值最大值和绝对值最小值
以下是C++代码实现:
```cpp
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin >> n;
int max_num = -1e9, min_num = 1e9, abs_max = 0, abs_min = 1e9;
for(int i=0; i<n; i++)
{
int num;
cin >> num;
max_num = max(max_num, num);
min_num = min(min_num, num);
abs_max = max(abs_max, abs(num));
abs_min = min(abs_min, abs(num));
}
cout << max_num << " " << min_num << " " << abs_max << " " << abs_min << endl;
return 0;
}
```
首先读入整数的个数n,然后遍历n个整数,分别更新最大值、最小值、绝对值最大值和绝对值最小值。最后输出这四个值即可。