门牌制作
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝要为一条街的住户制作门牌号。
这条街一共有 20202020 位住户,门牌号从 11 到 20202020 编号。
小蓝制作门牌的方法是先制作 00 到 99 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、71、0、1、7,即需要 11 个字符 00,22 个字符 11,11 个字符 77。
请问要制作所有的 11 到 20202020 号门牌,总共需要多少个字符 22?
分析
求出0-2020每个数字出现2的所有次数
代码
方案一:值得拥有
#include <iostream>
using namespace std;
int main(int* argc, char** argv)
{
int count = 0;
int num;
for (int m = 0; m <= 2; m++)
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < 10; k++)
{
if (k == 2 || j == 2 || i == 2 || m == 2)
{
count += 1;
num = k + j * 10 + i * 100 + m * 1000;
if (num == 2020)
{
cout << count << endl;
break;
}
if (k == 2 && j == 2 || k == 2 && i == 2 || k == 2 && m == 2 || j == 2 && i == 2 || j == 2 && m == 2 || i == 2 && m == 2)
{
count += 1;
if (k == 2 && j == 2 && i == 2 || k == 2 && j == 2 && m == 2 || m == 2 && j == 2 && i == 2)
{
count += 1;
if (k == 2 && j == 2 && i == 2 && m == 2)
{
count += 1;
}
}
}
}
}
}
}
}
return 0;
}
方案二
#include <iostream>
using namespace std;
int main()
{
int count = 0;
// 遍历所有门牌号
for (int num = 0; num <= 2020; num++)
{
int digit = num;
// 逐位检查数字中的字符2
while (digit > 0)
{
// 检查个位是否为2
if (digit % 10 == 2)
{
count++; // 如果是2,计数器加1
}
digit /= 10; // 移除个位数
}
}
cout << count << endl;
return 0;
}