题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝有很多数字卡片,每张卡片上都是数字0 到 9。 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,每拼一个, 就保存起来,卡片就不能用来拼其它数了。
小蓝想知道自己能从 11 拼到多少。
例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10, 但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 11 拼到多少?
提示:建议使用计算机编程解决问题
题目详解
1)例如小蓝有 30 张卡片,其中 0 到 9 各 3 张
2)第一次拼 1 到 9 (浅蓝底)
3)拼 10 时,就得用没用过的 0 和 1(黄底)
4)在拼写下一个数 11 时,就会发现只剩一个 1 。而 11 需要两个 1 ,根本不足以拼出 11 .
5)小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 11 拼到多少?
分步编写
1)定义一个数组,里面存放 卡片上的 0,1,2,3,4,5,6,7,8,9 数字
int[] num = new int[11];
2)设一个for循环, 解释 0 到 9 各 3 张卡片
for(int i =0;i<10;i++)
{
num[i] = 3;
}
3)接下来就要说明这30张卡片里面,就得主要对10以上的数字进行拆解,在这里我们可以分成个位数和十位数
个位数:对10取模(取余) 如11 % 10 = 1 , 22 % 10 = 2 ,就可以知道这个数的个数用到的是 num2 卡片
int num2 = num1 % 10;
十位数:除以10 如 11 / 10 = 1 , 22 / 10 = 2 , 这里用 /= 赋值运算符,就能默认有一个强制类型的转换
num1 /= 10;
4)如果在num数组内,num2 所指的数还存在的话,就可以继续往下拼字,否则不行。判断条件就可以看这个num[num2] 是否大于0了。
if(--num[num2] < 0)
{
flag = false;
}
5)通过不断的循环,将符合的数字一一拉出来。
注1.之所以选择 while 循环,是因为在这个循环里不知道它的迭代次数,比for循环更合适。
- num1 > 0 && flag 主要用于10以上的数字,并且短路与(&&)的两侧要求是 布尔表达式
while(num1 > 0 && flag)
6)如果到此 flag 为 false,就说明它不能达到我们筛选的条件,到此就可以截止了。
if(!flag)
{
break;
}
7)综上,只要出现不符合我们筛选的条件,我们就可以到此截止,再进行统计,看看究竟可以拼到哪个数字。
counts += 1;
参考代码
package Java.practice;
import java.util.Scanner;
//小蓝有很多数字卡片,每张卡片上都是数字0 到 9。
// 小蓝准备用这些卡片来拼一些数,他想从 1 开始拼出正整数,
// 每拼一个, 就保存起来,卡片就不能用来拼其它数了。
//小蓝想知道自己能从 11 拼到多少。
//例如,当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10,
// 但是拼 11 时卡片 1 已经只有一张了,不够拼出 11。
// 现在小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,
// 请问小蓝可以从 11 拼到多少?
public class Dog
{
public static void main(String[] args)
{
int[] num = new int[11];
for(int i =0;i<10;i++)
{
num[i] = 3;
}
int counts = 0;
for(int j = 1;j<30;j++)
{
int num1 = j;
boolean flag = true;
while(num1 > 0 && flag)
{
int num2 = num1 % 10;//11除以10余1
num1 /= 10;
if(--num[num2] < 0)
{
flag = false;
}
}
if(!flag)
{
break;
}
counts += 1;
}
System.out.println(counts);
}
}
参考示例;
10
最后最后
这里只是求了“当小蓝有 30 张卡片,其中 0 到 9 各 3 张,则小蓝可以拼出 1 到 10”的问题,与原来蓝桥杯的“小蓝手里有 0 到 9 的卡片各 2021 张,共 20210 张,请问小蓝可以从 11 拼到多少?”有数据上的出入,各位可以参考代码,来解决蓝桥杯的问题。(っ*´Д`)っ
``