蓝桥杯三天备考----枚举:卡片
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有很多数字卡片,每张卡片上都是数字 0到 9。
小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个,就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 1 拼到多少。
例如,当小蓝有 3030 张卡片,其中 00 到 99 各 33 张,则小蓝可以拼出 11 到 1010,
但是拼 1111 时卡片 11 已经只有一张了,不够拼出 1111。
现在小蓝手里有 00 到 99 的卡片各 20212021 张,共 2021020210 张,请问小蓝可以从 11 拼到多少?
提示:建议使用计算机编程解决问题。
解题思路:
建立一个从零到九的数组,每个数组大小为从零到九每种卡牌的数量,从一开始遍历,看每一位数字如果卡牌数量充足,就减一看下一位,直到遍历完整个数字,再看下一位数字,终止条件是当某一位数字的卡牌数量为零的时候,说明现有的卡牌数量已经拼不出这个数字了,输出上一位数字,因为题目要就是能够拼成的最大数字。
ps:一开始我不知道最大能拼出多大的数,后来发现如果拼出的最大数比循环上限高,则没有输出,低就有输出,也是一种解决方法。
#include<iostream> #include<algorithm> using namespace std; int n,m,num[10]; int main(){ for(int i = 0;i <=9;i ++){ num[i] = 2021; } for(int i = 1;i <= 999999;i ++) { int t = i; while(t) { if(num[t%10] == 0) { cout << i -1; return 0; } num[t%10] --; t/=10; } } cout << 0; return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】