ALi笔试题目-4.28

1. 题目一:魔法印章

  1. 题目描述:
    小红有一一个魔法印章,她准备把一个字符矩阵染成她想要的颜色。这个印章有个神奇的魔法,可以自由选择想要的颜色。但也有个限制,只能染一个十字区域。每次小红可以选择一个中心点, 将该点和上下左右最多2距离的点都染上指定的颜色。小红想让你输出最终矩阵的情况。

  2. 输入描述:
    第一行输入三个正整数n、m和k,代表矩阵的行数、列数和小红的染色次数。接下来的k行,每行输入两个正整数x,y和一个字符C,代表小.红将中心坐标为(x,y) 的十字染上了c代表的颜色。字符矩阵初始全部是’. ',行的坐标从1到n,列的坐标从1到m。
    1<x≤n<500
    1<y<≤m<500
    1<k:<105
    c保证是小写字母。

  3. 输出描述
    输出n行,每行一个长度为m的字符串,代表染色结束时的矩

  4. 示例一:
    1)输入:
    6 6 1
    3 3 g
    2)输出:
    …g…
    …g…
    ggggg.
    …g…
    …g…

  5. 示例二:
    1)输入:
    6 6 2
    3 3 q
    2 1 t
    2)输出:
    t.q…
    ttt…
    tqqqq.
    t.q…
    …q…

  6. 代码展示

package Demo4_29;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class demo1 {
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        int hang=cin.nextInt();   //矩阵的行数
        int lie=cin.nextInt();   //矩阵的列数
        int num= cin.nextInt();   //操作次数
        cin.nextLine();

        //1)输入:存储坐标和颜色
        List<List<Integer>> data=new ArrayList<>();
        List<String> color=new ArrayList<>();
        while(num-->0){
            List<Integer> list=new ArrayList<>();
            list.add(cin.nextInt());
            list.add(cin.nextInt());
            color.add(cin.next());
            cin.nextLine();
            data.add(list);
        }
        System.out.println(data);
        System.out.println(color);

        //2)初始化数组
        String[][] strings=new String[hang][lie];
        for(int i=0;i<hang;i++){
            for(int j=0;j<lie;j++){
                strings[i][j]=".";
            }
        }
        //3)循环染色
        for(int i=0;i<color.size();i++){
            ranse(strings,data.get(i),color.get(i),hang,lie);
        }
        //4)输出
        for(int i=0;i<hang;i++){
            for(int j=0;j<lie;j++){
                System.out.print(strings[i][j]);
            }
            System.out.println();   //起到了换行作用
        }

    }
    //方法:染色操作
    public static void ranse(String[][] strings,List<Integer> place,String color,int hang,int lie){
        //确定循环的上下左右值
        int top=place.get(0)-2>=1?place.get(0)-2-1:0;  //直接获得索引值
        int low=place.get(0)+2<=hang?place.get(0)+2-1:hang-1;  //直接获得索引值
        int left=place.get(1)-2>=1?place.get(1)-2-1:0;
        int right=place.get(1)+2<=lie?place.get(1)+2-1:lie;
        for(int i=top;i<=low;i++) strings[i][place.get(1)-1]=color;
        for(int i=left;i<=right;i++) strings[place.get(0)-1][i]=color;
    }
}

2. 题目二:最大字符串

  1. 题目描述:
    小红拿到了一一个仅包含数字和小数点(.“) 的字符串。她准备把这个字符串切分,使得切分后的每个数(整数或小数)都合法。小红想知道,切分后所有数之和的最大值是少。我们定义,合法的小数为:只包含一一个小数点, 且小数点的左和右均为数字字符。例如"0.23”、 “125.24”. “7.0"为合法小数,而”.45"、"345."为不合法小数。
  2. 输入输出描述:
    1)输入:一个长度不超过10”的字符串,保证连续数字的长度不低于2,不超过10.
    2)输出:切分后的和的最大值。保留-位小数。
  3. 示例:
    1)示例一
    (1):输入:12.23.45
    (2):输出:20.6=12.2+3.4+5
    2)示例二
    (1):输入:220.022
    (2):输出:242.0=220.0+22
  4. 代码展示
package Demo4_29;

import java.util.Scanner;

public class demo2 {
    public static void main(String[] args) {
        //1)输入
        Scanner cin=new Scanner(System.in);
        String string=cin.nextLine();
        StringBuilder builder=new StringBuilder(string);

        //2)以小数点进行分割,去小数点后一位
        double sum=0;
        int head=0;
        //前面有少数点的
        for(int i=0;i<builder.length();i++){
            if(builder.charAt(i)=='.'){
                String temp=builder.substring(head,i+2);  //包前不包后
                sum+=Double.parseDouble(temp);
                head=i+2;
                i++;
            }
        }
        //没有少数点剩下的
        String temp1=builder.substring(head,builder.length());  //包前不包后
        sum+=Double.parseDouble(temp1);


        //输出
        System.out.println(sum);
    }
}
  1. 注意事项
    1)活用StringBuilder,可以灵活操作字符串
    (1) builder.substring(1,2): 获得字符串的子串,包前不包后,添加索引值
    (2)builder.append(),添加元素
    (3)builder.insert(2,‘a’) :在指定索引值插入某个值
    (4)builder.delete(2) ;builder.delete(2,3) :删除某个字符串后者某个连续的子串

2)总结一下类型转换的功能
(1)字符串转向基本数据类型:parseXxx() 或 valueOf() ;优先使用valueOf()

利用基本数据类型对应的包装类的parseXxx()valueOf() 方法
package Demo4_29;

public class demo3 {
    public static void main(String[] args) {
        //字符串转别为基本数据类型
        //1)方法一:包装类型:parseXXX()
        String string1="00012";
        String string2="00012.5";
        String string3="false";
        int Int1=Integer.parseInt(string1);    //转变为整形,自动去零
        float Int2=Float.parseFloat(string2);  //转变为整形,自动去零
        boolean Int3=Boolean.parseBoolean(string3);  //转变为整形,自动去零
        System.out.println(Int1);
        System.out.println(Int2);
        System.out.println(Int3);
        //2)方法二:包装类型:valueOf()
        String string11="00012";
        String string22="00012.5";
        String string33="true";
        int Int11=Integer.valueOf(string11);    //转变为整形,自动去零
        float Int22=Float.valueOf(string22);  //转变为整形,自动去零
        boolean Int33=Boolean.valueOf(string33);  //转变为整形,自动去零
        System.out.println(Int11);
        System.out.println(Int22);
        System.out.println(Int33);
    }
}
//输出
12
12.5
false
12
12.5
true

(2)基本数据类型转向字符串:1) 加上双引号12+“” ; 2) 使用String.valueOf() 3)

//1)基本数据类型转变为字符串
        int A1=2;
        long A2=2L;
        float B1=2.2F;
        double B2=2.2;
        boolean C=false;
        String string1=A1+"";               //方法一:加上双引号“”
        System.out.println("A1="+string1);
        String string2=Float.toString(B1);  //方法二:XXX.toString() 使用包装类
        System.out.println("B1="+string2);
        String string3=String.valueOf(C);   //方法三:String.valueOf() 使用包装类
        System.out.println("C="+string3);
        //输出:
        A1=2
		B1=2.2
		C=false

(3)数组类型转向字符串:使用Arrays.toString();Arrays.deepToString()

 //2)集合类型转变为字符串:直接用toString(),得到的是地址;应该用Arrays.toString()
        int[] D=new int[]{2,3,4,5};          //一维数组使用Arrays.toString()
        String string4=D.toString();
        System.out.println("D="+string4);
        String string44=Arrays.toString(D);
        System.out.println("D="+string44);
        int[][] E=new int[][]{{2,3},{4,6}};  //多维数组使用Arrays.deepToString()
        String string5=E.toString();
        System.out.println("E="+string5);
        String string55=Arrays.deepToString(E);
        System.out.println("D="+string55);
        //输出
        D=[I@682a0b20
		D=[2, 3, 4, 5]
		E=[[I@3d075dc0
		D=[[2, 3], [4, 6]]

(4)集合类型转向字符串:使用list.toString()

        //3)集合类型,使用list.toString()
        List<Integer> list=new ArrayList<>(Arrays.asList(2,3,4,5,6));
        String string6=list.toString();
        System.out.println("list="+string6);
        //输出
        list=[2, 3, 4, 5, 6]
        
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值