洛谷刷题集合 | 数组 |

朝闻道,夕死可矣。

题目索引

  • 前言
    • 1.P1125 [NOIP2008 提高组] 笨小猴
    • 2.P1957 口算练习题
    • 3.P5015 [NOIP2018 普及组] 标题统计
    • 4.P5734 【深基6.例6】文字处理软件
  • 总结


前言

刷字符串纯粹就是想熟悉一个基础(字符串相关的API)以及常用方法,对这些如果可以手到擒来的时候不管用java解决什么问题的时候都会事半功倍!!


洛谷刷题集合 | 数组 |_第1张图片

1.P1125 [NOIP2008 提高组] 笨小猴

洛谷刷题集合 | 数组 |_第2张图片

解题思路:再次回顾这个题目的时候,想着是求质数的时候打表吧,也就100以内的质数,如果要判断是不是质数又要两个循环,人已经傻了。具体思路:先统计每一个单词出现的次数,其实这里要抛弃杂念,不要想着每个字母对应数目怎样诸如此类扰乱思路的问题就完全没问题了,其实我这里就是,我们完全从一开始就只统计一个频数数列,然后求出最大最小值就可以了。然后按照题目进行减法,然后暴力模拟!

代码如下:

package string;


import java.lang.reflect.Array;
import java.util.*;

//首先在拿到这个题目 第一想法是 遍历统计每个字符的出现的次数,然后进行比较
//先这样写 试试 能不能优化
public class P1125 {
    public static void main(String[] args) {
        int aim[]={2,3,5,7,11,13,15,17,19,21,23,29,31,34,37,39,41,43,47,53,57,59,61,67,71,73,79,83,89,91,97};
        Scanner sc=new Scanner(System.in);
        String str=sc.next();
        Map map=new HashMap(str.length());
        for (int i = 0; i < str.length(); i++) {
            int count=0;

            for (int j = 0; j < str.length(); j++) {
                if(str.charAt(j)==str.charAt(i))
                {
                    count++;
                }
            }
            map.put(str.charAt(i),count);
        }
        //得出结论  i=i+5  (size-1)*5+3 3个数  那么就是


        Object[] obj = map.values().toArray();
        int[] arr=new int[obj.length];
        for (int i = 0; i <obj.length ; i++) {
            arr[i]=Integer.parseInt(obj[i].toString());
        }
        int max=arr[0]; int min=arr[0];
        for (int i = 0; i <arr.length ; i++) {
                if(arr[i]>max) max=arr[i];
                if(arr[i]<min) min=arr[i];
        }
        for(int i=0;i<aim.length;i++)
        {
            if(max-min==aim[i]) {
                System.out.println("Lucky Word");
                System.out.println(max - min);
                return;
            }

        }
        System.out.println("No Answer");
        System.out.println(0);

    }
}

尚未优化,未完持续。。。。

2.P1957 口算练习题

洛谷刷题集合 | 数组 |_第3张图片

难点在于<若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。>,在这上面,倒是处理了很久,这个方法不是最优解,显得有些多余,但是AC就完了,等待优化!!

代码如下:

package string;

import java.util.Scanner;

public class P1957 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int i=sc.nextInt();
        sc.nextLine();
        char temp = 0;
        //那么第一步么 先来一个循环 输入 顺便解决问题  一步到位
        for (int j = 0; j <i; j++) {
            String nums=sc.nextLine();
            String[] arr= nums.split(" ");
            if(arr[0].equals("a")){
                int x=Integer.parseInt(arr[1]),y=Integer.parseInt(arr[2]);
                int num=x+y;
                String str=x+"+"+y+"="+num;
                System.out.println(str);
                System.out.println(str.length());
                temp=arr[0].charAt(0);
                continue;
            }
            if(arr[0].equals("b")){
                int x=Integer.parseInt(arr[1]),y=Integer.parseInt(arr[2]);
                int num=x-y;
                String str=x+"-"+y+"="+num;
                System.out.println(str);
                System.out.println(str.length());
                temp=arr[0].charAt(0);
                continue;
            }
            if(arr[0].equals("c")){
                int x=Integer.parseInt(arr[1]),y=Integer.parseInt(arr[2]);
                int num=x*y;
                String str=x+"*"+y+"="+num;
                System.out.println(str);
                System.out.println(str.length());
                temp=arr[0].charAt(0);
                continue;
            }else{
                if(temp=='a'){
                    int x=Integer.parseInt(arr[0]),y=Integer.parseInt(arr[1]);
                    int num=x+y;
                    String str=x+"+"+y+"="+num;
                    System.out.println(str);
                    System.out.println(str.length());
                    continue;
                }
                if(temp=='b'){
                    int x=Integer.parseInt(arr[0]),y=Integer.parseInt(arr[1]);
                    int num=x-y;
                    String str=x+"-"+y+"="+num;
                    System.out.println(str);
                    System.out.println(str.length());
                    continue;
                }
                if(temp=='c'){
                    int x=Integer.parseInt(arr[0]),y=Integer.parseInt(arr[1]);
                    int num=x*y;
                    String str=x+"*"+y+"="+num;
                    System.out.println(str);
                    System.out.println(str.length());
                    continue;
                }
            }
        }
    }
}

3.P5015 [NOIP2018 普及组] 标题统计

洛谷刷题集合 | 数组 |_第4张图片
如题意,遍历就行,见代码!

代码如下:

import java.util.Scanner;

public class Main{


    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int count=0;

            String str=sc.nextLine();
        System.out.print(qiuzhi(str));


    }

    static int  qiuzhi(String str)
    {
        int count=0;
        for (int i = 0; i < str.length(); i++) {
            if(str.charAt(i)!=' ')
            count++;
        }
        return count;
    }
}

4.P5734 【深基6.例6】文字处理软件

洛谷刷题集合 | 数组 |_第5张图片
此题没有多说的,熟悉API就行了!
这里用到了StringBuffer 可变型字符串对象。可以看我的另一篇文章深究她!!
见代码:

package string;


import java.util.Scanner;
//总觉的吧 这些个题目都在考验我的基本功力  这道题呀 要深究String全部的类型以及他的父母亲类型
//用String 我总觉得太难为情了 因为你想 这玩意可变 那不得直接用StringBuffer和 StringBuilder 可变 那我们就可变
// 使用StringBuilder吧  可变且效率高
// 1 是在字符串后面拼接字符串
// 2 截取指定字符串
// 3 插入片段
// 4 查找子串
public class P5734 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int q =sc.nextInt();
        String str=sc.next();
        StringBuilder str_1=new StringBuilder(str);
        for (int i = 0; i < q; i++) {
            int cin=sc.nextInt();
            if(cin==1){
                String s=sc.next();
                str_1.append(s);
                System.out.println(str_1);

            }
            if(cin==2){
                int m=sc.nextInt(),n=sc.nextInt();
                String s=str_1.substring(m);
                str_1=new StringBuilder(s);
                str_1.delete(n,str_1.length());
                System.out.println(str_1);
            }
            if(cin==3)
            {
                int start=sc.nextInt();
                String s=sc.next();
                str_1.insert(start,s);
                System.out.println(str_1);
            }
            if(cin==4){
                String s=sc.next();
                System.out.println(str_1.indexOf(s));
            }
        }
    }
}


总结

万丈高楼平地起,加油!

你可能感兴趣的:(秃头之路,算法,数据结构,java)