字符串及链表的应用:例题

Posted IToIT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串及链表的应用:例题相关的知识,希望对你有一定的参考价值。

第一题:

import java.util.Arrays;
import java.util.Scanner;
/**
 * 描述
HEIHEI非常喜欢吃花生,他每天都会吃一些花生,心情好的话会吃的比较多。
现在已经知道,HEIHEI从周一到周日的心情值递增的,也就是说周一吃的花生最少,周日吃的花生最多。
现在给你7个数表示有7堆花生,顺序是打乱的,HEIHEI每天吃的花生数都在这7个数中,现在告诉你今天周几,请你告诉HEIHEI他今天应该吃多少花生。
例如花生数有“1 2 5 4 6 7 3”,输入“Monday”,星期一就应该输出1,如果输入“Thursday”,周四的话应该吃4个,输出4.
 * 输入
第二行有7个数分别表示这一周内每一天的花生数。
第三行有一个字符串,表示周几(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday)。
 * 输出
输出一个数,表示这一天应该吃的花生数。
 */
public class Chihuasheng {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String str1=sc.nextLine();//
        String str2=sc.next();
        String[] strs1=str1.split(" ");
        int[] ins=new int[strs1.length];//将输入的字符串数组转化为整数数组
        for(int i=0;i<strs1.length;i++){
            ins[i]=Integer.parseInt(strs1[i]);//为整数数组赋值
        }
        Arrays.sort(ins);//排序
        String[] strs2=new String[]{"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
        for(int i=0;i<strs2.length;i++){
            if(str2.equals(strs2[i])){//如果输入的周几与字符串中相等,那么将该日期在字符串数组中的索引提取出来,输出整数数组的该索引
                System.out.println(ins[i]);
            }
        }
    }
}

第二题:

import java.util.ArrayList;
import java.util.Scanner;
/*
 * 描述
现在给你两堆数,每个堆中有n个数。你的任务是把这两个堆并成一个堆,并把合并后的堆中的元素按从小到大的顺序输出。
例如当n=5时,第一个堆是{1,2,3,4,5},第二个堆是{5,6,7,8,9},那么你就应该输出1 2 3 4 5 6 7 8 9。(一堆中可能有重复的数)
 * 输入
第一行输入一个整数T(1≤T≤100),表示有T组测试数据。
每组数据先输入一个整数N(1≤N≤10),表示每个堆中元素的个数。然后输入N个整数A(0≤A<100),最后输入N个整数B(0≤B<100)。
 * 输出
把合并后的堆中的元素按从小到大的顺序输出。
 */
public class Hebing {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        ArrayList<Integer> aa=new ArrayList<Integer>();
        String str1=md();
        String str2=md();
        String[] str1s=str1.split(" ");
        String[] str2s=str2.split(" ");
        for(int i=0;i<str1s.length;i++){
            aa.add(Integer.parseInt(str1s[i]));
        }
        for(int i=0;i<str2s.length;i++){
            if(aa.contains(Integer.parseInt(str2s[i]))){
                
            }else{
                aa.add(Integer.parseInt(str2s[i]));
            }
        }
        aa.sort(null);
        for(int i=0;i<aa.size();i++){
            System.out.print(aa.get(i)+" ");
        }
    }
    public static String md(){
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        return str;
    }
}

第三题:

import java.util.ArrayList;
import java.util.Scanner;
/**
 * 描述:
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。
(如果这个第一个数就是最小的数,则保持原样输出,如果最小的数有相同的按照前面的交换)
 * 输入:
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。
 * 输出:
对于每组输入数据,输出交换后的数列,每组输出占一行。
 */
class D{
    int[] md(String str){
        String[] strs=str.split(" ");
        
        ArrayList<Integer> aa=new ArrayList<Integer>();
        for(int i=1;i<strs.length;i++){
            aa.add(Integer.parseInt(strs[i]));
        }
        int min=aa.get(aa.size()-1);
        for(int n=0;n<aa.size();n++){
            if(aa.get(n)<min){
                min=aa.get(n);
            }
        }
        aa.set(aa.indexOf(min), aa.get(0));
        aa.set(0, min);
        
        int[] ins=new int[aa.size()];
        for(int i=0;i<aa.size();i++){
            ins[i]=aa.get(i);
        }
        return ins;
    }
}

public class Jiaohuanshuchu {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        D d=new D();
        int[] ins=new int[d.md(str).length];
        for(int i=0;i<ins.length;i++){
            ins[i]=d.md(str)[i];
        }
        for(int i=0;i<ins.length;i++){
            System.out.print(ins[i]+" ");
        }
    }
}

第四题:

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

/**
 * 描述:
给定一行字符,逆序输出此行(空格.数字不输出)
 * 输入:
数据中间有且只有一个空格(这样你可以把此行当成两个字符串读取)。
每行字符长度不超过40
并且保证输入的字符只有空格(1个),数字,小写字母三种
 * 输出:
对应每行测试数据,逆序输出(空格和数字不输出)
 */

class A{
    String md(char[] chs){
        ArrayList<String> aa=new ArrayList<String>();
        for(int i=0;i<chs.length;i++){
            if(chs[i]>=‘a‘&&chs[i]<=‘z‘){//将字符串数组里小写字母添加到新的链表当中
                aa.add(chs[i]+"");
            }
        }
        String str="";
        for(int i=aa.size()-1;i>=0;i--){
            str+=aa.get(i);//逆序输出
        }
        return str;
    };
}

public class Nixushuchu {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        char[] chs=str.toCharArray();//将输入的字符串转化成字符数组
        A a=new A();
        System.out.println(a.md(chs));
    }
}

第五题:

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

/*
 * 描述:有一只母乌龟 ,它每年年初生一头小母乌龟 。每头小母乌龟 从第四个年头开始,每年年初生一头小母乌龟 。
 * 请你计算第n年是共有多少只母乌龟 (第一年是有一头母乌龟)
 * 
 * 输入:输入多组测试数据,每组测试数据占一行,输入一个整数n(0<n<56)n含义如题所示,n=0是表示输入结束
 * 
 * 输出:每组输出数据占一行,输出第在第n年的时候母乌龟的数量。
 */

public class Shuwugui {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int num=0;
        if(n==0){
            
        }
        ArrayList<Integer> aa=new ArrayList<Integer>();
        
        if(n>56){//不能大于56,如果大于就重新输入
            n=sc.nextInt();
        }else if(n>=4&& n<=56){
            for(int i=1;i<=n;i++){
                if(i<=3){
                    num=i;
                }else{
                    //根据规律,第n年的数量等于第n-3年加n-1年的数量,由于链表第一个是从0开始,所以get(i-4)+get(i-2)
                    num=aa.get(i-4)+aa.get(i-2);
                }
                aa.add(num);//每一次把num添加到链表
            }
            System.out.println(num);
        }else if(n>0&&n<4){
            num=n;//前三年没有规律,第几年就有几只乌龟
            System.out.println(num);
        }else{
            System.out.println("输入结束");//输入0表示输入结束
        }    
    }
}

 

以上是关于字符串及链表的应用:例题的主要内容,如果未能解决你的问题,请参考以下文章

C语言链表的使用及链表的实现原理

Java中顺序表及链表详解

--逆序创建链表及链表反转

LeetCode刷题日记精选例题(附代码+链接)

链表补充及链表和数组的区别

Java数据结构你必须要掌握的链表面试经典例题(附超详细图解和代码)