java简单算法题


1. 计算字符串最后一个单词的长度

import java.util.Scanner;

/**
 * @Auther  liaoping
 *
 * 计算字符串最后一个单词的长度
 *
 */
/*
next()方法读取到空白符就结束l;
nextLine()读取到回车结束也就是“\r”;

而“\s+”则表示匹配任意多个上面的字符。另因为反斜杠在Java里是转义字符,所以在Java里,我们要这么用“\\s+”
[\s]表示,只要出现空白就匹配
*/
public class demo {
    public static void main(String[] args) {
        Scanner scaner = new Scanner(System.in);
        String str=scaner.nextLine();
        String s[]=str.split("\\s+");
        int length=s[s.length-1].length();
        System.out.println(length);
    }
}

2. 计算字符的个数

import java.util.Scanner;

/**
 * @Auther  liaoping
 * 写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母。
 * 然后输出输入字符串中,该字母的出现次数。不区分大小写。字符串长度小于500
 */
public class demo2 {
    public static void main(String[] args) {
        System.out.println("请输入一串字母");
        Scanner scanner = new Scanner(System.in);
        String first=scanner.next();
        System.out.println("请输入要测试的字母");
        Scanner scanner1 = new Scanner(System.in);
        String index=scanner1.next();
            char[] firstChars=first.toCharArray();
            int num=0;
            for(int i=0;i<firstChars.length;i++){
                if (String.valueOf(firstChars[i]).equalsIgnoreCase(index)){
                    num++;
                }
            }
            System.out.println(num);


    }
}

3. 字符串分隔

import java.util.Scanner;

/**
 * 连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
 * 长度不是8整数倍的字符串请在后面补数字为0,空字符串不处理
 */

/**
 *  public String substring(int beginIndex)
 返回一个新字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。
 */

public class demo04 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);

        while(scanner.hasNext()){
            String str =scanner.nextLine();
            StringBuffer sb = new StringBuffer();
            sb.append(str);
            int size=str.length();
            int addzero=8-size%8;
            while(addzero>0 && addzero<8){
                sb.append("0");
                addzero--;
            }
            String str1=sb.toString();
            while (str1.length()>0){
                System.out.println(str1.substring(0,8));
                str1=str1.substring(8);
            }
        }
    }
}

4. 进制转换

import java.util.Scanner;

/**
 * @Auther  liaoping
 * 
 * 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示
 */
public class demo05 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNext()){
            String str=scanner.nextLine();
            System.out.println(Integer.valueOf(str.substring(2),16).toString());
        }
    }
}

5. 质数因子

import java.util.Scanner;

/**
 * 
 * @Auther  liaoping
 * 
 * 描述

 功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
 最后一个数后面也要有空格

 输入描述:

 输入一个long型整数
 输出描述:

 按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
 */
public class demo06 {
    public static void main(String[] args) {
        //1.定义一个输入函数,获取输入的值
        Scanner scanner = new Scanner(System.in);
        long num = scanner.nextLong();
        //2.for循坏定义质数因子值的范围
        for (long i = 2; i <= num; ++i) {
            while (num % i == 0) {
                System.out.print(i + " ");
                num /= i;
            }
        }
        System.out.println();
    }
}

6. 取近似值

import java.util.Scanner;

/**
 * @Auther  liaoping
 *
 * 描述

 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
 输入描述:

 输入一个正浮点数值
 输出描述:

 输出该数值的近似整数值
 *
 */


public class demo7 {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        //输入参数
        double a = in.nextDouble();
        //取整数部分
        int b = (int)a;
        //判断
        if((a - b) >= 0.5){
            b=(int)(a + 0.5);
        }
        System.out.println(b);

    }

    public static void paixun(){
        int arr[]={6,3,5,4,9,7,3,1,8};

        /*  选择排序算法
        for(int i=0;i<arr.length;i++){
            for(int j=i+1;j<arr.length;j++){
                int temp=0;
                if(arr[i]>arr[j]){
                    temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }*/
        /*
         * 冒泡排序算法
         *
         * */
        for (int i=0;i<arr.length-1;i++){
            for(int j=0;j<arr.length-i-1;j++){
                int temp=0;
                if(arr[j]>arr[j+1]){
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }

        for(int s :arr){
            System.out.print(s+",");
        }
    }
}

7. 合并表记录

import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

/**
 * 
 *  @Auther  liaoping
 * 描述

 数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
 输入描述:

 先输入键值对的个数
 然后输入成对的index和value值,以空格隔开
 输出描述:

 输出合并后的键值对(多行)

 示例:
 4
 0 1
 0 2
 1 2
 3 4

 0 3
 1 2
 3 4

 */
public class demo08 {

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

        while (sc.hasNext()){
            int next = sc.nextInt();
            TreeMap<Integer,Integer> map = new TreeMap<>();
            for (int i = 0; i < next; i++) {
                int key = sc.nextInt();
                int value = sc.nextInt();
                if (map.containsKey(key)){
                    map.put(key,map.get(key)+value);
                }else {
                    map.put(key,value);
                }
            }
            for (Map.Entry<Integer, Integer> integerIntegerEntry : map.entrySet()) {
                System.out.println(integerIntegerEntry.getKey()+" "+integerIntegerEntry.getValue());
            }
        }
    }
}

8. 提取不重复的整数

import java.util.Scanner;

/**
 * @Auther  liaoping
 * 
 * 描述
 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
 保证输入的整数最后一位不是0。
 输入描述:

 输入一个int型整数
 输出描述:

 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
 示例1
 输入:

 9876673

 输出:

 37689
 */
public class demo09 {
    public static void main(String[] args) {
        /*Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        char[] chars= (num+"").toCharArray();
        String str ="";
        for(int i= chars.length-1; i>= 0;i--){
            if(!str.contains(chars[i]+"")){
                str +=chars[i];
            }
        }
        System.out.println(Integer.valueOf(str));*/
        test();
    }

    public  static void test(){
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        //数字类型转成字符串类型进行操作
        String s = String.valueOf(i);
        //在将字符串类型转换成字符类型数组
        char[] chars = s.toCharArray();
        String str="";//用来记录取出的数据
        for(int x=chars.length-1;x>=0;x--){
            if(!str.contains(chars[x]+"")){
                str=str+chars[x];
            }
        }
        System.out.println(str);
    }

}

9. 字符个数统计

import java.util.Scanner;

/**
 * @Auther  liaoping
 *  编写一个函数,计算字符串中含有的不同字符的个数。字符在ASCII码范围内(0~127,包括0和127),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
 例如,对于字符串abaca而言,有a、b、c三种不同的字符,因此输出3。
 输入描述:

 输入一行没有空格的字符串。
 输出描述:

 输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。
 示例1
 输入:

 abc

 输出:

 3
 */
public class demo10 {
    public static void main(String[] args) {
        /*Scanner scanner=new Scanner(System.in);
        String next=scanner.nextLine();
        //将这行字符串变成字符数组
        char[] chars = next.toCharArray();
        //定义计数器
        int count=0;
        //定义一个字符串来统计已检查的字串
        String str="";
        for(int i=0;i<chars.length;i++){
            if(!str.contains(chars[i]+"")){
                count++;
                str=str+(chars[i]+"");
            }
        }
        System.out.println(count);*/
    }
}

10. 句子逆序

import java.util.Scanner;

/**
 * @Auther  liaoping
 * 
 * 描述

 将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
 所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
 输入描述:

 输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
 输出描述:

 得到逆序的句子
 示例1
 输入:

 I am a boy

 输出:

 boy a am I

 *
 */
public class demo13 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            String s1=scanner.next();
        }
    }
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值