小黑的面试题记录1-13

题目描述:1

正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
输入描述:

输入两个正整数A和B。

输出描述:

输出A和B的最小公倍数。
示例1

输入

5 7

输出

35
解答:
import java.util.Scanner;
 
public class Main {
    public static int getResult(int m ,int n){
        if(m

题目描述2

计算一个数字的立方根,不使用库函数

详细描述:

  • 接口说明

  • 原型:


public static double getCubeRoot(double input)

输入:double 待求解参数

返回值:double  输入参数的立方根,保留一位小数

输入描述:

待求解参数 double类型

输出描述:


输入参数的立方根 也是double类型
示例1

输入

216

输出

6.0
解答:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        double d = Double.parseDouble(str);
        System.out.println(getValue(d));
    }
      
    public static double getValue(double d){
        double x = 1;
        double x0 = x - (x * x * x - d) / (3 * x * x);
        while (x - x0 > 0.00000001 || x - x0 < -0.000000001){
            x = x0;
            x0 = x - (x * x * x - d) / (3 * x * x);
        }
        double value = (double) Math.round(x0 * 10.0) / 10.0;
        return value;
    }
}

题目描述3

将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。 如:输入“I am a student”,输出“tneduts a ma I”。

输入参数:

inputString:输入的字符串

返回值:

输出转换好的逆序字符串

输入描述:

输入一个字符串,可以有空格

输出描述:

输出逆序的字符串
示例1

输入

I am a student

输出

tneduts a ma I
解答:
import java.io.*;
import java.util.Scanner;
public class Main{
    public static void main(String [] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        StringBuffer output = new StringBuffer();
        for (int i = input.length() - 1; i >= 0; i--) {
            output.append(input.charAt(i));
        }
        System.out.println(output.toString());
    }
       
}

题目描述4

从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0
本题有多组输入数据,输入到文件末尾,请使用while(cin>>)读入
输入描述:

输入任意个整数

输出描述:

输出负数个数以及所有非负数的平均值
示例1

输入

-13
-4
-7

输出

3
0.0
解答:
import java.io.*;
import java.util.*;
    
public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] nums = br.readLine().split(" ");
        int negativeNum = 0;
        int positiveNum = 0;
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            int num = Integer.parseInt(nums[i]);
            if (num < 0) {
                negativeNum++;
            } else {
                sum += num;
                positiveNum++;
            }
        }
        System.out.println(negativeNum);
        System.out.println(Math.round(sum * 10.0 / positiveNum) / 10.0);
    }
}

题目描述5

连续输入字符串(输出次数为N,字符串长度小于100),请按长度为8拆分每个字符串后输出到新的字符串数组,

长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

首先输入一个整数,为要输入的字符串个数。

例如:
输入:2

abc

12345789

输出:abc00000

12345678

90000000

接口函数设计如下:


/*****************************************************************************
功能:存储输入的字符串

输入:字符串

输出:无

返回:0表示成功,其它返回-1
******************************************************************************/

int  AddString(char *strValue);
/****************************************************************************
功能:获取补位后的二维数组的长度

输入:无

输出:无

返回:二维数组长度
*****************************************************************************/

int  GetLength();


/*****************************************************************************
功能:将补位后的二维数组,与输入的二维数组做比较

输入:strInput:输入二维数组,iLen:输入的二维数组的长度

输出:无

返回:若相等,返回0;不相等,返回-1.其它:-1;
******************************************************************************/
int  ArrCmp(char strInput[][9],int iLen);

输入描述:

首先输入数字n,表示要输入多少个字符串。连续输入字符串(输出次数为N,字符串长度小于100)。

输出描述:

按长度为8拆分每个字符串后输出到新的字符串数组,长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
示例1

输入

2
abc
123456789

输出

abc00000
12345678
90000000
解答:
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
   
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader bufrd = new BufferedReader(new InputStreamReader(System.in));
        String input;
        while((input=bufrd.readLine())!=null){
            int count=Integer.parseInt(input);
            StringBuilder result = new StringBuilder();
            for(int i=0;i0){
                    length++;
                }
                for (int j=0;jinput.length()){
                        end=input.length();
                    }
                    String current = input.substring(start,end);
                    result.append(current);
                    if(current.length()<8);
                    for(int k=0;k<8-current.length();k++){
                        result.append("0");
                    }
                    result.append("\n");
                    start+=8;
                    end+=8;
                }
            }
            System.out.println(result.toString().trim());
        }
    }
}

题目描述6

题目描述

Redraiment是走梅花桩的高手。Redraiment总是起点不限,从前到后,往高的桩子走,但走的步数最多,不知道为什么?你能替Redraiment研究他最多走的步数吗?

样例输入

6

2 5 1 5 4 5

样例输出

3

提示

Example:
6个点的高度各为 2 5 1 5 4 5
如从第1格开始走,最多为3步, 2 4 5
从第2格开始走,最多只有1步,5
而从第3格开始走最多有3步,1 4 5
从第5格开始走最多有2步,4 5

所以这个结果是3。

接口说明

方法原型:

int GetResult(int num, int[] pInput, List  pResult);

输入参数:
int num:整数,表示数组元素的个数(保证有效)。
int[] pInput: 数组,存放输入的数字。

输出参数:
List pResult: 保证传入一个空的List,要求把结果放入第一个位置。
返回值:
正确返回1,错误返回0

输入描述:

输入多行,先输入数组的个数,再输入相应个数的整数

输出描述:

输出结果
示例1

输入

6
2
5
1
5
4
5

输出

3
解答:
import java.io.*;
import java.util.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        String input;
        while ((input = read.readLine())!=null){
            int num = Integer.parseInt(input);
           String[] strs = read.readLine().split(" ");
            int[] nums = new int[num];
            int max = 0;
            for(int i=0;imax){
                    max=result[i];
                }
            }
            System.out.println(max);
        }
    }
}

题目描述7

如果统计的个数相同,则按照ASCII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。

实现以下接口:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用)
按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
清空目前的统计结果,重新统计
调用者会保证:
输入的字符串以‘\0’结尾。

输入描述:

输入一串字符。

输出描述:

对字符中的
各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
示例1

输入

aadddccddc

输出

dca
解答:
import java.io.*;
import java.util.*;
 
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while((str=br.readLine())!=null){
            char[] chArr = str.toCharArray();
            int[] temp = new int[150];
            for(int i=0;i

题目描述8

输入整型数组和排序标识,对其元素按照升序或降序进行排序(一组测试用例可能会有多组数据)

接口说明

原型:

void sortIntegerArray(Integer[] pIntegerArray, int iSortFlag);

输入参数:

Integer[] pIntegerArray:整型数组

int iSortFlag:排序标识:0表示按升序,1表示按降序

输出参数:

返回值:

void

输入描述:

1、输入需要输入的整型数个数

输出描述:

输出排好序的数字
示例1

输入

8
1 2 4 9 3 55 64 25
0

输出

1 2 3 4 9 25 55 64
解答:
import java.io.*;
import java.util.*;
  
  
public class Main{
      
      
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = "";
        while((line = br.readLine()) != null){
            int n=Integer.parseInt(line);
            String[] data=br.readLine().split(" ");
            int m=Integer.parseInt(br.readLine());
            int[] arr=new int[n];
            for(int i=0;i

题目描述9

功能:等差数列 2,5,8,11,14。。。。

输入:正整数N >0

输出:求等差数列前N项和

返回:转换成功返回 0 ,非法输入与异常返回-1

本题为多组输入,请使用while(cin>>)等形式读取数据
输入描述:

输入一个正整数。

输出描述:

输出一个相加后的整数。

示例1
输入

2

输出

7
解答:
import java.io.*;
public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = "";
        while((str=br.readLine())!=null){
            int n = Integer.parseInt(str);
            System.out.println((3*n*n+n)/2);
        }
    }
}

题目描述10

自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n以内的自守数的个数

接口说明

/*
功能: 求出n以内的自守数的个数

输入参数:
int n

返回值:
n以内自守数的数量。
*/

public static int CalcAutomorphicNumbers( int n)
{
/在这里实现功能/

return 0;
}
本题有多组输入数据,请使用while(cin>>)等方式处理

输入描述:

int型整数

输出描述:

n以内自守数的数量。

示例1
输入

2000

输出

8
解答:
import java.io.*;
import java.util.*;
   
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while((str=br.readLine())!=null){
            int n =  Integer.parseInt(str);
            int count = 0;
            for(int i=0;i<=n;i++){
                int r= i;
                int k = 0;
                while(r!=0){
                    r = r/10;
                    k++;
                }
                if((i*i-i)%(Math.pow(10,k)) == 0){
                    count++;
                }
            }
            System.out.println(count);
        }
           
    }
}

题目描述11

首先输入要输入的整数个数n,然后输入n个整数。输出为n个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。
输入描述:

首先输入一个正整数n,
然后输入n个整数。

输出描述:

输出负数的个数,和所有正整数的平均值。

示例1
输入

5
1
2
3
4
5

输出

0 3
解答:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
 
public class Main {
    public static void main(String[] sa) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = "";
        while((line=br.readLine())!=null){
            int N = Integer.parseInt(line);
            int negativeCount=0;
            int positiveCount=0;
            int positiveSum = 0;
            String[] strs = br.readLine().split(" ");
            for(int i=0;i 0){
                    ++positiveCount;
                    positiveSum += temp;
                }
                else if(temp < 0)
                    ++negativeCount;
            }
            System.out.println(negativeCount+" "+Math.round(positiveSum * 10.0/positiveCount)/10.0);
            //System.out.printf("%d %.1f\n",negativeCount,positiveSum*1.0/positiveCount);
        }
    }
}

题目描述12

将一个字符中所有出现的数字前后加上符号“*”,其他字符保持不变
public static String MarkNum(String pInStr)
{

return null;
}
注意:输入数据可能有多行
输入描述:

输入一个字符串

输出描述:

字符中所有出现的数字前后加上符号“*”,其他字符保持不变

示例1
输入

Jkdi234klowe90a3

输出

Jkdi*234*klowe*90*a*3*
解答:
import java.util.*;
import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String line=null;
        while((line=br.readLine())!=null){
            StringBuffer sb=new StringBuffer();
            char[] chs=line.toCharArray();
            for(int i=0;i='0')&&(chs[i]<='9')){
                    sb.append("*"+chs[i]);
                    i++;
                    while((i='0')&&(chs[i]<='9')){
                          sb.append(chs[i]);
                           
                        i++;
                    }
                    sb.append("*");   
                }
                if(i

题目描述13

考试题目和要点:

1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。(30分)

2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。(30分)

3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。(

输入描述:

输入一个double数

输出描述:

输出人民币格式
示例1

输入

151121.15

输出

人民币拾伍万壹仟壹佰贰拾壹元壹角伍分
解答:
import java.io.*;
import java.util.*;
public class Main{
    public static HashMap numMap = new HashMap();
    public static HashMap danweiMap = new HashMap();
     
    static{
        numMap.put('0',"零");
        numMap.put('1',"壹");
        numMap.put('2',"贰");
        numMap.put('3',"叁");
        numMap.put('4',"肆");
        numMap.put('5',"伍");
        numMap.put('6',"陆");
        numMap.put('7',"柒");
        numMap.put('8',"捌");
        numMap.put('9',"玖");
        numMap.put('.',"");
         
        danweiMap.put(1,"分");
        danweiMap.put(2,"角");
        danweiMap.put(3,"");
        danweiMap.put(4,"元");
        danweiMap.put(5,"拾");
        danweiMap.put(6,"佰");
        danweiMap.put(7,"仟");
        danweiMap.put(8,"万");
        danweiMap.put(9,"拾");
        danweiMap.put(10,"佰");
        danweiMap.put(11,"仟");
        danweiMap.put(12,"拾");
        danweiMap.put(13,"佰");
        danweiMap.put(14,"仟");
    }
     
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = null;
        while((input = br.readLine())!=null){
            char[] cArray = input.toCharArray();
             
            StringBuilder result = new StringBuilder("人民币");
             
            int length = cArray.length;
             
            //用于记录数字是否为0
            boolean flag = true;
            if(input.equals("0.00")){
                result.append("零元整");
            }else if(cArray.length>=4 && cArray[0] != '0'){
                for(int i=0;i2){
                        result.append(numMap.get(cArray[i]));
                        flag = false;
                    }else if(cArray[i] != '0'){
                        if(cArray[i] == '1' && ((length-i)==5 || (length-i)==9 ||(length-i)==12)){
                            result.append(danweiMap.get(length-i));
                        }else{
                            result.append(numMap.get(cArray[i]));
                            result.append(danweiMap.get(length-i));
                        }
                        flag = true;
                    }
                }
            }else if(cArray.length == 4 && cArray[0] == '0'){
                for(int i=1;i

你可能感兴趣的:(算法基础)