第十一届蓝桥杯java B组第二场-试题A: 门牌制作

文章目录

    • 一、题目
    • 二、解释说明
    • 三、代码实例
    • 四、题目结果

一、题目

试题 A: 门牌制作(5分)

【问题描述】

小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字
符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 个
字符 0, 2 个字符 1, 1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

二、解释说明

有的小伙伴可能会这样写代码,代码如下:

public class Main {
     
    public static void main(String[] args) {
     
    	int count = 0;
    	for(int i = 1; i <= 2020; i++) {
     
			while(i>0){
      
				if(i%10==2)count++;
				i/=10;
			}
		}
		System.out.println(count);
	}
}

发现控制台怎么什么输出也没有呢?直接炸掉了
是因为当我们遍历每一个数的时候,没有给他找个替身,原本的值会发生改变。所以如果一开始i==10的话,执行完while循环的时候i本身就又变成了1,造成了死循环。

正确的代码如下,其中x就是替身

三、代码实例

public class Main {
     
    public static void main(String[] args) {
     
    	int count = 0;
    	for(int i = 1; i <= 2020; i++) {
     
    		int x=i;//替身为x
			while(x>0){
      
				if(x%10==2)count++;
				x/=10;
			}
		}
		System.out.println(count);
	}
}

四、题目结果

624

你可能感兴趣的:(蓝桥杯,第十一届蓝桥杯,门牌制作,第二场,试题A,java,B组)