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);
}
}
}
}