#include <iostream>
#include <cmath>
using namespace std;
/// @brief 检查是否该数含有4,比如40就有4
/// @param num 待检查数字
/// @param pos 4 所在的位置,从右往左第一个算作1
/// @return
bool chek_if_num_has_4(int num, int *pos)
{
if (num % 10 == 4)
{
*pos = 1;
return true;
}
int pos_4 = 1;
while (num / 10 > 0)
{
pos_4++;
if (num / 10 == 4)
{
*pos = pos_4;
return true;
}
num /= 10;
}
return false;
}
// 靠谱的车,任何数字位置遇到4直接跳过
static void HuaWei_OD_test17(void)
{
int read_num;
cin >> read_num;
// 从1开始,每次+1,直到达到数字read_num,期间遇到数字4,在4的位置+1然后跳过,
// 统计跳过的数字个数,比如从39+1到40,但是直接跳到了50,因此这次跳跃忽略了10个数
int skip_sum = 0;
int where_is_4 = 0; // 4所在的位置(从右向左从1开始,最右边算作1)
for (int i = 1; i <= read_num; i++)
{
if (chek_if_num_has_4(i, &where_is_4))
{
if(where_is_4 == 1)
{
skip_sum++;
continue;
}
else
{
skip_sum += pow(10, where_is_4 - 1);
i += pow(10, where_is_4 - 1);
continue;
}
}
}
// 实际产生费用
cout << read_num - skip_sum << endl;
}
int main()
{
HuaWei_OD_test17();
return 0;
}
2024年华为OD机试真题-靠谱的车 C/C++解法
最新推荐文章于 2024-08-21 22:59:28 发布