模拟法计数问题c++代码
时间: 2023-07-09 08:45:29 浏览: 62
以下是一个使用模拟法解决计数问题的示例C++代码:
```c++
#include <iostream>
using namespace std;
int main() {
int n, count = 0;
cin >> n; // 输入问题中的参数 n
for (int i = 1; i <= n; i++) { // 枚举所有可能的情况
int num = i;
while (num > 0) { // 对于每个数,判断是否符合计数条件
if (num % 10 == 2 || num % 10 == 0 || num % 10 == 1 || num % 10 == 9) {
count++;
break; // 如果符合条件,立即跳出循环,避免重复计数
}
num /= 10; // 检查下一位数
}
}
cout << count << endl; // 输出符合计数条件的数的个数
return 0;
}
```
该程序的思路是:枚举所有可能的情况,对于每个数,检查其每一位数字是否符合计数条件,如果符合,则计数器加1,然后跳出循环,避免重复计数。最后输出计数器的值,即符合计数条件的数的个数。
相关问题
模拟法计数排序问题c++
计数排序是一种非比较排序算法,可以用于对一组数据进行排序。下面是使用模拟法实现计数排序的C++代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 100000; // 数据范围
int a[MAXN], b[MAXN], c[MAXN];
void countingSort(int a[], int b[], int c[], int n) {
memset(c, 0, sizeof(c)); // 将计数数组清零
for (int i = 0; i < n; ++i) {
++c[a[i]]; // 统计每个数出现的次数
}
for (int i = 1; i < MAXN; ++i) {
c[i] += c[i - 1]; // 计算每个数在排序后的序列中的位置
}
for (int i = n - 1; i >= 0; --i) {
b[c[a[i]] - 1] = a[i]; // 将数放到排序后的序列中
--c[a[i]];
}
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
countingSort(a, b, c, n);
for (int i = 0; i < n; ++i) {
cout << b[i] << " ";
}
cout << endl;
return 0;
}
```
其中,`a` 数组存放待排序的数据,`b` 数组存放排序后的数据,`c` 数组存放每个数出现的次数。`countingSort` 函数中,第一个循环用来统计每个数出现的次数,第二个循环用来计算每个数在排序后的序列中的位置,第三个循环用来将数放到排序后的序列中。最后,输出排序后的序列即可。
模拟电梯系统的C++代码
答:#include <stdio.h>
int main()
{
int currentFloor = 0;
int destinationFloor;
printf("输入你想去的楼层:");
scanf("%d", &destinationFloor);
// 电梯运行
while (currentFloor != destinationFloor)
{
printf("电梯正在运行...\n");
if (currentFloor < destinationFloor)
{
currentFloor++;
}
else
{
currentFloor--;
}
}
printf("电梯已到达目的地。");
return 0;
}