蓝桥杯练习8
问题描述如下:小明对数位中含有2,0,1,9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1,2,9,10,至32,39,和40,共28个,他们的和是574。请问,在1到n中,所有这样的数的和是多少
思路:这道题与上题的数的分解类似。
思路:
将int数值类型转换成String类型。用String类的indexOf()方法,判断该数字是否包含“2”,“0”,“1”,“9”这四个字符。
代码展示如下:
package 第十届蓝桥杯大赛决赛题;
import java.util.Scanner;
/*
* 问题描述:
* 小明对数位中含有2,0,1,9的数字很感兴趣(不包括前导0),在1到40中这样的数包括1,2,9,10,至32,39,和40
* ,共28个,他们的和是574。
* 请问,在1到n中,所有这样的数的和是多少
* */
public class 特别数的和 {
public static void main(String[] args) {
//这道题的思路与题数的分解思路相同。
Scanner sc = new Scanner(System.in);
try {
int n=sc.nextInt();
int sum=0;
for(int i=1;i<=n;i++) {
String sc1 = Integer.toString(i);
if(sc1.indexOf("2")!=-1||sc1.indexOf("0")!=-1||sc1.indexOf("1")!=-1||sc1.indexOf("9")!=-1) {
sum+=i;
}
}
System.out.println(sum);
}catch(Exception e) {
sc.close();
}
}
}
最近做了一些题,发现JAVA二维数组部分知识都忘了,一下都是我的复习笔记
二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。
声明二维数组的语法如下:
type arr[][];
type [][] arr;
type 表示二维数组的类型,arr 表示数组名称,第一个中括号表示行,第二个中括号表示列。
初始化二维数组
三种语法方式如下:
arr = new type[][]{1,2,3,4,5,……};
arr = new type[][] {new 构造方法(参数列),……};
type[][] arr={{第1行第1列的值,第1行第2列的值,…},{第2行第1列的值,第2行第2列的值,…},…};
使用第二种方式声明 int 类型的二维数组,然后初始化该二维数组。代码如下:
int[][] temp;
temp=new int [][]
{
{new int(1),new int(2)},{new int(3),new int(4)}
};
使用第三种方式声明 int 类型的二维数组,并且初始化数组。代码如下:
int[][] temp={{1,2},{3,4}};
获取单个元素:
需要获取二维数组中元素的值时,也可以使用下标来表示。语法如下:
array[i-1][j-1];
获取全部元素
在二维数组中,直接使用 length 属性获取的是数组的行数,在指定的索引后加上 length(如 array[0].length)表示的是该行拥有多少个元素,即列数。
例题:
假设有一个矩阵为 5 行 5 列,该矩阵是由程序随机产生的 10 以内数字排列而成。下面使用二维数组来创建该矩阵,代码如下:
package 基础复习;
public class 二维数组 {
public static void main(String[] args) {
//创建一个二维矩阵
int[][] matrix = new int[5][5];
//随机分配值
for(int i=0;i<matrix.length;i++) {
for(int j=0;j<matrix[i].length;j++) {
matrix[i][j]=(int)(Math.random()*10);
}
}
System.out.println("下面是程序生成的矩阵\n");
//遍历二维矩阵并输出
for(int k=0;k<matrix.length;k++) {
for(int g=0;g<matrix[k].length;g++) {
System.out.print(matrix[k][g]+"");
}
System.out.println();
}
}
}
获取整行元素
获取指定行的元素时,需要将行数固定,然后只遍历该行中的全部列即可。
public static void main(String[] args)
{
double[][] class_score={{100,99,99},{100,98,97},{100,100,99.5},{99.5,99,98.5}};
Scanner scan=new Scanner(System.in);
System.out.println("当前数组只有"+class_score.length+"行,您想查看第几行的元素?请输入:");
int number=scan.nextInt();
for(int j=0;j<class_score[number-1].length;j++)
{
System.out.println("第"+number+"行的第["+j+"]个元素的值是:"+class_score[number-1][j]);
}
}
获取整列元素
获取指定列的元素与获取指定行的元素相似,保持列不变,遍历每一行的该列即可。
public static void main(String[] args)
{
double[][] class_score={{100,99,99},{100,98,97},{100,100,99.5},{99.5,99,98.5}};
Scanner scan=new Scanner(System.in);
System.out.println("您要获取哪一列的值?请输入:");
int number=scan.nextInt();
for(int i=0;i<class_score.length;i++)
{
System.out.println("第 "+(i+1)+" 行的第["+number+"]个元素的值是"+class_score[i][number]);
}
}```