/ 你最大的问题,就是觉得时间还够 /
备战15届蓝桥杯,从这题开始
积跬步,至千里。
【每日一题】旨在通过对蓝桥杯历届经典真题进行练习讲解,帮助大家每天进步一点点,小伙伴们可以把讲解作为参考,也可以在留言中整理、分享自己的解题思路和做题心得。
不知道怎样参加免费刷题群的小伙伴,可以扫描下方二维码加入专属刷题群:
社群资源共享
和10000+名同学一起学习进步
👇
长按识别二维码
一起来看看今天的题目吧~
今日题目
解题思路
比较容易的模拟,我们从1开始枚举, 每次检查剩下的卡片能不能拼出这个数字就好。
我们是怎么把一个数在10进制下每个位置的数字求出来呢?很简单对吧,先 对 10 取模,个位上的数字就求出来了,再除以10 ,原本十位上的数字就变到了个位上,再对 10取模...依次进行下去就求出来了。把当前拼的这个数每一位都拆出来,看看那个数字的卡片还够不够,不够的话就说明拼不了,这时候退出循环,所以最多拼到上一个数。
参考代码
C++
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int num[10];
bool check(int x){
while(x){
int now = x % 10;
if(num[now] > 0) num[now]--;
else return false;
x /= 10;
}
return true;
}
int main()
{
for(int i = 0;i < 10;i++) num[i] = 2021;
for(int i = 1;;i++){
if(!check(i)){
cout << i - 1 << endl;
break;
}
}
return 0;
}
Java
public class Main {
static int[] num = {2021,2021,2021,2021,2021,2021,2021,2021,2021,2021};
static int check(int x){
while(x > 0){
int now = x % 10;
if(num[now] > 0) num[now]--;
else return 0;
x /= 10;
}
return 1;
}
public static void main(String[] args) {
for(int i = 1;;i++){
if(check(i) == 0){
System.out.println(i - 1);
break;
}
}
}
}
python
a = [2021 for i in range(10)]
def check(x):
while(x > 0):
now = int(x % 10)
if(a[now] > 0):
a[now] -= 1
else:
return 0
x = x // 10
return 1
cnt = 1
while(check(cnt)):
cnt += 1
print(cnt - 1)
最终答案:3181
别忘记完成后
留下你的心得📝打卡
也期待看到同学们
日复一日坚持后的质变
💪💪💪
备战第 15 届蓝桥杯的小伙伴
赶快加入大部队,一起刷题吧~
👇
长按识别二维码
- 加入蓝桥云课👑会员 -
解锁🔓更多权益
✅2000+ 道竞赛题 & 官方题解
蓝桥杯官方视频题解,包含解题思路及 AC
✅600+ 门实战课免费学
更包含企业级实战项目,前沿AI技术、自动驾驶 等方向,每月都有新增内容!
✅历届蓝桥杯备赛课程免费
名师备赛精品课,助你一站式夺奖
......
👇点击阅读原文了解详情
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...