Java机试常见题——编程题(中)

名字的漂亮度

1 程序

import java.util.*;

public class Main{
    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        int num = 0;
        boolean flag = true;
        while(scan.hasNextLine())
        {
            StringBuilder sb = new StringBuilder();
            num = Integer.parseInt(scan.nextLine());   //输入名字个数
            for(int i=0;i=0;i--)
            res += target[i] *(i+1);     //计算名字的漂亮度
        return res;
    }
}

2 测试

2
zhangsan
lisi
192
101

按字节截取字符串

1 程序

import java.util.*;
//截取字符串,汉字不能输出一半
/*
AABCADEF
6
AABCAD
* */
public class Main {

    public static void main(String[] args)  {
        Scanner scan = new Scanner(System.in);
        String str;
        while (scan.hasNextLine()){
            str = scan.nextLine();
            String[] tmp=str.split(" ");
            String chars=tmp[0];                    // 字符串
            int len=Integer.parseInt(tmp[1]);       // 截取的字符个数

            int count=0, i=0;
            for (;i='a'&&c<='z'||c>='A'&&c<='Z')
                    count+=1;
                else count+=2;
                if (count>len) {             // 注意,这里是>号。如果有=号,还会再循环一次,i要多加一次
                    break;
                }
            }
            System.out.println(chars.substring(0,i));
        }

    }
}

2 测试

我ABC汉DEF 6
我ABC

多线程

1 程序

import java.util.*;
 
public class Main {
    public static void main(String[] args)  {
        Scanner scan = new Scanner(System.in);    
        while(scan.hasNext()){                 // 如果下面是nextInt ,则这里要用hasNext
            int N = scan.nextInt();
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < N; i++) {
                sb.append("ABCD");
            }
            System.out.println(sb);
        }
    }
}

2 测试

4
ABCDABCDABCDABCD

输出单向链表中倒数第k个结点

1 程序

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            int[] arr = new int[n+1];
            for(int i = 0; i < n; i++){
                arr[i] = sc.nextInt();
            }
            int k = sc.nextInt();
            //倒数的第k个,正数的是n-k+1,注意数组下标从0开始,因此是n-k
            System.out.println(arr[n-k]);
        }
        sc.close();  // 注意这里关闭下
    }
}

2 测试

8
1 2 3 4 5 6 7 8
5
3

iNOC产品部-杨辉三角的变形

1 程序

import java.util.*;
/*
                1                                 第一行没有,输出为-1
             1  1  1                              第二行没有,输出为-1
          1  2  3  2  1                           奇数行,是2个数
       1  3  6  7  6  3  1                        4的倍数的偶数是第3个
    1  4  10 16 19 16 10  4  1                    奇数行,是2个数
1   5  15 20 45 51 45 30  15 5  1                 非4的倍数的偶数是第4个
*/
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int n = in.nextInt();           // 输入的行号
            // 如果n小于等于2,则没有偶数,为-1
            if(n<=2)
                System.out.println(-1);
            // 如果是奇数行,则是第2个数
            else if(n%2==1){
                System.out.println(2);
            }else{
                // 如果是偶数行,且能被4整除,则是第3个数
                if(n%4==0)
                    System.out.println(3);
                // 如果是偶数行,但不能被4整除,则是第4个数
                else
                    System.out.println(4);
            }
        }
        in.close();
    }
}

2 测试

4
3

(练习用)挑7

1 程序

import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            int num = scan.nextInt();
            int count=0;
            for(int i=1;i<=num;i++){
                if(i%7==0){     // 7的倍数计数
                    count++;
                }else if(String.valueOf(i).contains("7"))    // 该字符串含7计数
                {
                    count++;
                }
            }
            System.out.println(count);
        }
        scan.close();
    }
}

2 测试

20
3

iNOC产品部--完全数计算

1 程序

import java.util.*;
public class Main{
    public static void main(String [] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int n = in.nextInt();   // 输入一个自然数
            int count = 0;
            //1不是完备数,从2开始遍历
            for(int i=2;i<=n;i++){
                if(isPerfect(i)){         // 对完备数进行计数
                    count++;
                }
            }
            System.out.println(count);
        }
    }
    
    private static boolean isPerfect(int src){
        int sum = 1;  // 注意1要加进来,sum是满足条件的约数
        // 注意这里的条件i*i
        for(int i =2;i*i<=src;i++){     //注意这里从2开始,另外质数的判断条件是i*i<=src
            if(src%i==0){   // 必须能除断
                sum +=i;        // 加第1约数
                sum+=src/i;     // 加第2个约数
            }
        }
        if(sum==src){
            return true;
        }
        return false;
    }

}

2 测试

1000
3

无线OSS-高精度整数加法

1 程序

import java.util.*;
import java.math.*;
 
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()){
            String str=scan.nextLine();
            BigInteger a = new BigInteger(str.trim());   // 读入第一个大数
            BigInteger b = new BigInteger(scan.nextLine().trim());     // 读入第二个大数
            System.out.println(a.add(b).toString());          // 两个大数的相加还是大数
        }
        scan.close();
    }
}

2 测试

9876543210
1234567890
11111111100

输入n个整数,输出其中最小的k个

1 程序

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            int count =scan.nextInt();
            int k =scan.nextInt();
            int[] num= new int[count];
            for(int i=0;i

2 测试

5 2
1 3 4 7 2
1 2

找出字符串中第一个只出现一次的字符

1 程序

import java.util.*;
 
 
public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str;
        while(scan.hasNextLine()) {
            str = scan.nextLine();
            char[] c = str.toCharArray();            //转数组
            int num[] = new int[128];                //用于计数每个字符
            for(int i = 0;i

2 测试

asdfasdfo
o

查找组成一个偶数最接近的两个素数

1 程序

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            int num = scan.nextInt();
            int n = num/2;       // 第一个数
            int m = num - n;     // 第二个数
            boolean flag1 = false;   
            boolean flag2 = false;
            do{
                flag1 = issushu(n);   // 第一个数是否是素数
                flag2 = issushu(m);   // 第二个数是否是素数
                if(flag1&&flag2){
                    System.out.println(m+"\n"+n);
                    break ;
                }
                else{
                    n = n+1;
                    m = num -n;
                }
            }while(n

2 测试

54
23
31

查找输入整数二进制中1的个数

1 程序

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        int num;
        while(scan.hasNext()){
            num = scan.nextInt();   // 输入整数
            int m =0;
            m = findNumberOf1(num);  //查找二进制串中1的个数
            System.out.println(m);
        }
    }
    
    public   static   int  findNumberOf1( int num){
        String binaryString = Integer.toBinaryString(num);   // 将一个整数转为二进制字符串
        int count = 0;
        for(int i=0;i

2 测试

2567237
10

查找两个字符串a,b中的最长公共子串

1 程序

import java.util.Scanner;
 
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()){
            String str1 = scan.nextLine();
            String str2 = scan.nextLine();
            String shortStr = "";
            String longStr = "";
            if(str1.length()

2 测试

abcdefghijklmnop
abcsafjklmnopqrstuvw
jklmnop

成绩排序

1 程序

import java.util.*;
import java.io.IOException;

public class Main{

    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()){
            String str=scan.nextLine();
            //获取要排序的人的个数
            int count = Integer.parseInt(str);
            //获取输入的排序方法(升序还是降序) 0是降序 1是升序
            int sortType = Integer.parseInt(scan.nextLine());
            String[] users = new String[count];   // 姓名
            int[] scores = new int[count];        // 分数
            for(int i=0;i=0;j--){
                        if(scores[j]=0;j--){       // 下标分别是[0,1,2,...  i-1]  插入前,从后往前比较,j代表比较下标
                        if(scores[j]>score){
                            scores[j+1] = scores[j];
                            users[j+1] = users[j];
                        }
                        else{   // 插入的数就是最大,不用比较了,直接跳出
                            break;
                        }
                    }
                    scores[j+1] = score;  // 这里的j加1,是因为循环跳出时,减去了1
                    users[j+1] = user;
                }
            }
            for(int i=0;i

2 测试

3
0
fang 90
yang 50
ning 70
fang 90
ning 70
yang 50

字符串通配符

1 程序

import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()) {
            String line = scan.nextLine();
            String str1=line;                   // 含有通配的字符串
            String str2=scan.nextLine();        // 完整字符串
            System.out.println(isMatch(str1, str2));
        }
    }
    
    public static boolean isMatch(String str1,String str2) {
        // sta1 = te?t*.*
        // replaceAll第一个是正则表达,第二个是正则表达是被替换的串
        str1=str1.replaceAll("\\?", "[0-9a-zA-Z]"); // 匹配一个字符
        str1=str1.replaceAll("\\*","[0-9a-zA-Z]*"); // 匹配0个或1个字符
        // 运行到这里  str1 = te[0-9a-zA-Z]t[0-9a-zA-Z]*.[0-9a-zA-Z]*
        // matches 参数是正则表达式
        if(str2.matches(str1))  return true;
        return false;
    }

}

2 测试

te?t*.*
txt12.xls
false

三一 百钱买百鸡问题

1 程序

import java.util.Scanner;

/*
x:公鸡
y:母鸡
100-x-y为小鸡
y=25-7x/4
*/
public class Main {
    public static void main( String[] args ) {
        Scanner scan = new Scanner(System.in);
        int num;
        while (scan.hasNext()) {
            num=scan.nextInt();
            int y = 0;
            for (int x = 0; ; x = x + 4) {
                int[] list = new int[3];   //分别放公鸡,母鸡,小鸡
                y = 25 - 7 * x / 4;
                list[0] = x;
                list[1] = y;
                list[2] = 100 - x - y;
                if (list[2] < 0 || list[1] < 0) {         // 母鸡和小鸡任何一个小于0,就跳出
                    break;
                } else {
                    System.out.println(list[0] + " " + list[1] + " " + list[2]);   // 输出各种情况
                }
            }
        }
    }
}

2 测试

1
0 25 75
4 18 78
8 11 81
12 4 84

三二 计算日期到天数转换

1 程序

//输入年月日,返回天数
//1-31 2-28 3-31 4-30 5-31 6-30 7-31 8-31 9-30 10-31 11-30 12-31
import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()) {
            String line=scan.nextLine();
            String[] lineary=line.split(" ");
            int year=Integer.valueOf(lineary[0]);      // 年
            int month=Integer.parseInt(lineary[1]);    // 月
            int day=Integer.valueOf(lineary[2]);       // 日
            System.out.println(getAllDay(year, month, day));
        }
         
    }
    public static int getAllDay(int year,int month,int day) {
        int[] dayary= {31,28,31,30,31,30,31,31,30,31,30,31};
        //判断闰年
        if(year%4==0) dayary[1]=29;
        int total=0;
        for(int i=0;i

2 测试

2012
12
31
366

公共字串计算

1 程序

import java.util.Scanner;
 
 
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()){
            String str1 = scan.nextLine();
            String str2 = scan.nextLine();
            String shortStr = "";
            String longStr = "";
            if(str1.length()

2 测试

hdfjkf
fdjsl
1

尼科彻斯定理

1 程序

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            // 输入的数n
            int n  = scan.nextInt();
            GetSequeOddNum(n);
        }
    }
    
    public static void GetSequeOddNum(int n){
        int temp = 0;
        // 经过数学计算,第1个奇数为n*n-n+1
        StringBuffer br = new StringBuffer();
        int m = n*n-n+1;
        for(int i = 0;i

2 测试

8
57+59+61+63+65+67+69+71

超长正整数相加

1 程序

import java.util.*;
import java.math.*;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()){
            String str=scan.nextLine();
            BigInteger a = new BigInteger(str.trim());   // 读入第一个大数
            BigInteger b = new BigInteger(scan.nextLine().trim());     // 读入第二个大数
            System.out.println(a.add(b).toString());          // 两个大数的相加还是大数
        }
        scan.close();
    }
}

2 测试

53478
546546545
546600023

整形数组合并

1 程序

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextInt()){
            TreeSet list = new TreeSet();  // 这句必须放在while循环内,否则运行错误
            StringBuffer sb= new StringBuffer();            // 这句必须放在while循环内,否则运行错误
            int n1 = scan.nextInt();   // 第一个数的个数

            for(int i=0;i

2 测试

3
1 2 5
4
-1 0 3 2
-101235

 

你可能感兴趣的:(java,Java)