/ 你最大的问题,就是觉得时间还够 /
备战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] -= 1else:return 0x = x // 10return 1cnt = 1while(check(cnt)):cnt += 1print(cnt - 1)
最终答案:3181
别忘记完成后
留下你的心得📝打卡
也期待看到同学们
日复一日坚持后的质变
💪💪💪
备战第 15 届蓝桥杯的小伙伴
赶快加入大部队,一起刷题吧~
👇
长按识别二维码
- 加入蓝桥云课👑会员 -
解锁🔓更多权益
✅2000+ 道竞赛题 & 官方题解
蓝桥杯官方视频题解,包含解题思路及 AC
✅600+ 门实战课免费学
更包含企业级实战项目,前沿AI技术、自动驾驶 等方向,每月都有新增内容!
✅历届蓝桥杯备赛课程免费
名师备赛精品课,助你一站式夺奖
......
👇点击阅读原文了解详情

推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……




还没有评论,来说两句吧...