暑假刷题1

1.查找数组众数

给定一个数组A[n], 定义数组的众数 ( Majority Element) 为数组中出现次数超过 n/2 次的元素, 假设数组A[n]非空且一定存在众数, 请设计算法找到该众数并输出.

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        String[] str=sc.nextLine().replace("[","").replace("]","").split(",");
        int[] data=new int[str.length];
        for(int i=0;i<str.length;i++){
            data[i]=Integer.parseInt(str[i]);
        }
        HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
        int[] res=new int[data.length];
        for(int i=0;i<data.length;i++){
            if(!map.containsKey(data[i])){
                map.put(data[i],1);
            }else{
                int tmp=map.get(data[i]);
                map.put(data[i],tmp+1);
                //找到众数之后就直接返回
                if(map.get(data[i])>=data.length/2){
                    System.out.print(data[i]);
                    return;
                }
            }
        }
        if(data.length==1){
            System.out.print(data[0]);
        }
    }
}

2.合并数组

请实现一个函数,功能为合并两个升序数组为一个升序数组

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s1 = in.nextLine();
        //判断是一个数组还是两个数组
        if (!in.hasNext()) {
            System.out.println(s1);
            return;
        }
        String s2 = in.nextLine();
        String[] str1 = s1.split(",");
        String[] str2 = s2.split(",");
        int len1 = str1.length;
        int len2 = str2.length;
        int[] arr1 = new int[len1];
        int[] arr2 = new int[len2];
        for (int i = 0; i < len1; i++) {
            arr1[i] = Integer.parseInt(str1[i]);
        }
        for (int i = 0; i < len2; i++) {
            arr2[i] = Integer.parseInt(str2[i]);
        }
        //以上为读取字符串数据,再转换为int数组
        int[] ans = new int[len1 + len2];
        int loc1 = 0;
        int loc2 = 0;
        int loc = 0;
        for (loc = 0; loc < len1 + len2; loc++) {
            if (loc1 ==len1) {
                ans[loc] = arr2[loc2];
                loc2++;
            } else if (loc2 == len2) {
                ans[loc] = arr1[loc1];
                loc1++;
            } else if (arr1[loc1] < arr2[loc2]) {
                ans[loc] = arr1[loc1];
                loc1++;
            } else {
                ans[loc] = arr2[loc2];
                loc2++;
            }
        }
        for (int i = 0; i < len1 + len2 - 1; i++) {
            System.out.print(ans[i] + ",");
        }
        System.out.println(ans[len1 + len2 - 1]);
    }
}

3.汽水瓶

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

import java.util.*;
public class Main {
        
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);

        while(sc.hasNext()){
            int count=0;
            int l=sc.nextInt();//总空瓶数
            if(l==0){
                break;
            }
            while(l>=2){
                //老板先借给你一瓶汽水,
                if(l==2){
                    count=count+1;
                    break;
                }
                int tmp=l/3;
                l=l%3+tmp;
                count=count+tmp;
            }
            System.out.println(count);
        }
    }
}

4.质数因子

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

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int num = scanner.nextInt();
            for (int i = 2; i <= Math.sqrt(num); i++) {
                while(num % i==0){
                    System.out.print(i+" ");
                    num=num/i;
                }
            }
            if(num>1){
                System.out.print(num+" ");
            }
        }
    }
}

5.进制转换

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

import java.util.*;
public class Main {
        
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            String str=sc.next();
            System.out.println(Integer.decode(str));
        }
    }
}

6.字符串分隔

•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
重点在于对方法substring()的使用

import java.util.*;
public class Main {
    public static void method1(String res){
        System.out.println(res);
    }
    public static void method2(String res){
        while(res.length()<8){
                   res+="0";
        }
        System.out.println(res);
    }
    public static void method3(String res){
        System.out.println(res.substring(0,8));
    }
    public static void use(String res){
        if(res.length()==8){
               method1(res);
           }else if(res.length()<8){
               method2(res);
           }else{
               method3(res);
           }
    }
    public static void main(String[] args) {
        // write your code here
       Scanner scan=new Scanner(System.in);
       while(scan.hasNext()){
           String res=scan.nextLine();
           use(res);
           while(res.length()>8){
               res=res.substring(8);//字符串的索引8开始截取到整个字符串结束
               use(res);
           }
       }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值