:)A题:门牌制作
&问题描述&
小蓝要为一条街的住户制作门牌号。
这条街一共有2020位住户,门牌号从1到2020编号。
小蓝制作门牌的方法是先制作0到9这几个数字字符,最后根据需要将数字粘贴到门牌上,
例如门牌1017需要依次粘贴字符1、0、1、7、即需要1个字符0,2个字符1,1个字符7.
请问要制作所有的1到2020号门牌,总共需要多少个字符2?
解题方法:暴力枚举
难度:简单
代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int count=0;
for(int i=1;i<=2020;i++)
{
String s=i+"";
for(int j=0;j<s.length();j++) {
if (s.charAt(j) == '2') {
count++;
}
}
}
System.out.println(count);
}
}
:)试题B寻找2020
<问题描述>
小蓝有一个数字矩阵,里面只包含数字0和2,小蓝很喜欢2020,他想找到这个数字矩阵有多少个2020
小蓝只关注三种构成2020的方式
&同一行里面连续四个字符从左到右构成2020。
&同一行里面连续四个字符从上到下构成2020。
&在一条从左上到右下的斜线上的连续四个字符,从左上到右下构成2020.
例如,对与下面矩阵
220000
000000
002202
000000
000022
002020
一共有5个2020,其中1个是在同一行里,3个是在斜线上。
小蓝的矩阵比上面的矩阵大,由于太大了,他只好将这个矩阵放在一个文件里,在试题目录下有一个2020.txt里面给出了小蓝的矩阵
请帮助小蓝确定他的矩阵有多少个2020.
<解题思路:DFS深度搜索>DFS算法链接>https://oi-wiki.org/search/dfs/
<方法:快速读取BufferedReander,使用readline方法时,当文件内容为空时将返回NULL,通过while(read.readline()!=null)来对文件进行连续读取>
<代码实现>
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
BufferedReader bf=new BufferedReader(new InputStreamReader(new FileInputStream("D:\\文件地址")));
String s="";
char [][]ant=new char[300][];
int temp=0;
int count=0;
while((s=bf.readLine())!=null)
{
ant[temp++]=s.toCharArray();
}
for(int i=0;i<ant.length;i++)//暴力搜索DFS
{
for(int j=0;j<ant.length;j++)
{
if(ant[i][j]=='2')
{
if(i<ant.length-3&&ant[i+1][j]=='0'&&ant[i+2][j]=='2'&&ant[i+3][j]=='0')
{
count++;//从上往下看
//2
//0
//2
//0
}
if(j<ant[i].length-3&&ant[i][j+1]=='0'&&ant[i][j+2]=='2'&&ant[i][j+3]=='0')
{
count++;//从左往右看
//2020
}
if(i<ant.length-3&&j<ant[i].length-3&&ant[i+1][j+1]=='0'&&ant[i+2][j+2]=='2'&&ant[i+3][j+3]=='0')
{
count++;//斜着看
//2
// 0
// 2
// 0
}
}
}
}
System.out.println(count);
}
}
更新ing ^ ^