LQ0021 奖券数目组合+枚举
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0021 奖券数目组合+枚举相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2015初赛 C++ B组D题
题目描述
有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。
某抽奖活动奖券号码是5位数(10000-99999),要求其中不要出现带“4”的号码。
主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
输出格式
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
问题分析
这是一个填空题,只要填入计算结果即可。用程序来解可以有多种解法。
本题可以有多种解法。
解法一:给出基于组合的算式应该最简单的一种。总共5位数字,最高位可以取0和4以外的数字,其他各位可以选4以外的数字。所以奖券的数量为89990=52488。
方法二:使用C++字符串类string的操作来实现。
方法三:根据进制原理,取出每一位数字进行判定,再进行统计计算。
方法四:用C语言字符串库函数strchr()来进行统计计算。
程序说明
通过本博文的题解,可以了解各种编程技巧。
AC的C语言程序(组合)如下:
/* LQ0021 奖券数目 */
#include <stdio.h>
int main()
printf("%d\\n", 8 * 9 * 9 * 9 * 9);
return 0;
AC的C++语言程序(字符串操作)如下:
/* LQ0021 奖券数目 */
#include <iostream>
using namespace std;
int main()
int cnt = 0;
for (int i = 10000; i <= 99999; i++)
string s = to_string(i);
if (s.find('4') == string::npos)
cnt++;
cout << cnt << endl;
return 0;
AC的C语言程序(进制)如下:
/* LQ0021 奖券数目 */
#include <stdio.h>
int main()
int cnt = 0;
for (int i = 10000; i <= 99999; i++)
int t = i;
while (t)
if (t % 10 == 4)
cnt++;
break;
else
t /= 10;
printf("%d\\n", 99999 - 10000 + 1 - cnt);
return 0;
AC的C语言程序(字符串函数)如下:
/* LQ0021 奖券数目 */
#include <stdio.h>
#include <string.h>
char s[5 + 1];
int main()
int cnt = 0;
for (int i = 10000; i <= 99999; i++)
sprintf(s, "%d", i);
if (strchr(s, '4') == NULL)
cnt++;
printf("%d\\n", cnt);
return 0;
以上是关于LQ0021 奖券数目组合+枚举的主要内容,如果未能解决你的问题,请参考以下文章