前言
简单问题,写的不好,大佬见谅.
如有疏漏,恳请指正,小编垂首.
问题描述:
有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。某抽奖活动的奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。

问题解析:
-
极致暴力 五个for循环,有4就下一位
-
反向思维,双循环,对10取余,等于4的++,然后用总数去减(儒雅的暴力美学)
实现代码:
代码如下(示例):极致的暴力
#include<iostream>
using namespace std;
int main() {
int n = 0;
for (int a = 1; a < 10; a++) {
if(a!=4)
for (int b = 0; b < 10; b++) {
if (b != 4)
for (int c = 0; c < 10; c++) {
if (c != 4)
for (int d = 0; d < 10; d++) {
if (d != 4)
for (int e = 0; e < 10; e++) {
if (e != 4) n++;
}
}
}
}
}
cout << n << endl;
return 0;
}
代码如下(示例):儒雅的暴力美学
#include<iostream>
using namespace std;
int main() {
int n = 0;
for (int i = 10000; i < 99999; i++) {
int t = i,j;
while (t > 0) {
j = t % 10;
if (j == 4) {//含4的
n++;
break;
}
t /= 10;
}
}
cout << 90000 - n << endl;
return 0;
}
测试案例:

总结
暴力就完事了
本文探讨了一个有趣的数学问题:如何计算不含数字4的五位数奖券号码的最大数量。提供两种解决方案,一种使用五个for循环进行直接计算,另一种采用反向思维减少计算量。
359

被折叠的 条评论
为什么被折叠?



