笔试面试手写代码常见题目,赶快学习!
发布日期:2021-05-07 13:03:33 浏览次数:17 分类:精选文章

本文共 8198 字,大约阅读时间需要 27 分钟。

笔试面试手写代码常见题目,建议收藏,反复观看练习

文章目录


1…统计一篇英文文章单词个数。

public class WordCounting {   public static void main(String[] args) {         try(FileReader fr = new FileReader("a.txt")) {               int counter = 0;            boolean state = false;            int currentChar;     while((currentChar= fr.read()) != -1) {          if(currentChar== ' ' || currentChar == '\n'          || currentChar == '\t' || currentChar == '\r') {           state = false;       }      else if(!state) {        state = true;     counter++;             }      }      System.out.println(counter);        }      catch(Exception e) {                  e.printStackTrace();     }  }}

补充:这个程序可能有很多种写法,这里选择的是Dennis M. Ritchie和Brian W. Kernighan老师在他们不朽的著作《The C Programming Language》中给出的代码,向两位老师致敬。下面的代码也是如此。

2.输入年月日,计算该日期是这一年的第几天。

import java.util.Scanner;public class DayCounting {       public static void main(String[] args) {           int[][] data = {                   {   31,28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},                {   31,29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}        };        Scanner sc = new Scanner(System.in);        System.out.print("请输入年月日(1980 11 28): ");        int year = sc.nextInt();        int month = sc.nextInt();        int date = sc.nextInt();        int[] daysOfMonth = data[(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)?1 : 0];        int sum = 0;        for(int i = 0; i < month -1; i++) {               sum += daysOfMonth[i];        }        sum += date;        System.out.println(sum);        sc.close();    }}

3.回文素数:所谓回文数就是顺着读和倒着读一样的数(例如:11,121,1991…),

public class PalindromicPrimeNumber {       public static void main(String[] args) {           for(int i = 11; i <= 9999; i++) {               if(isPrime(i) && isPalindromic(i)) {                   System.out.println(i);            }        }    }    public static boolean isPrime(int n) {           for(int i = 2; i <= Math.sqrt(n); i++) {               if(n % i == 0) {                   return false;            }        }        return true;    }    public static boolean isPalindromic(int n) {           int temp = n;        int sum = 0;        while(temp > 0) {               sum= sum * 10 + temp % 10;            temp/= 10;        }        return sum == n;    }}

4.全排列:给出五个数字12345的所有排列。

public class FullPermutation {       public static void perm(int[] list) {           perm(list,0);    }    private static void perm(int[] list, int k) {           if (k == list.length) {               for (int i = 0; i < list.length; i++) {                   System.out.print(list[i]);            }            System.out.println();        }else{               for (int i = k; i < list.length; i++) {                   swap(list, k, i);                perm(list, k + 1);                swap(list, k, i);            }        }    }    private static void swap(int[] list, int pos1, int pos2) {           int temp = list[pos1];        list[pos1] = list[pos2];        list[pos2] = temp;    }    public static void main(String[] args) {           int[] x = {   1, 2, 3, 4, 5};        perm(x);    }}

5.对于一个有N个整数元素的一维数组,找出它的子数组(数组中下标连续的元素组成的数组)之和的最大值。

下面给出几个例子(最大子数组用粗体表示):

数组:{ 1, -2, 3,5, -3, 2 },结果是:8
2) 数组:{ 0, -2, 3, 5, -1, 2 },结果是:9
3) 数组:{ -9, -2,-3, -5, -3 },结果是:-2
可以使用动态规划的思想求解:

public class MaxSum {       private static int max(int x, int y) {           return x > y? x: y;    }    public static int maxSum(int[] array) {           int n = array.length;        int[] start = new int[n];        int[] all = new int[n];        all[n - 1] = start[n - 1] = array[n - 1];        for(int i = n - 2; i >= 0;i--) {               start[i] = max(array[i], array[i] + start[i + 1]);            all[i] = max(start[i], all[i + 1]);        }        return all[0];    }    public static void main(String[] args) {           int[] x1 = {    1, -2, 3, 5,-3, 2 };        int[] x2 = {    0, -2, 3, 5,-1, 2 };        int[] x3 = {    -9, -2, -3,-5, -3 };        System.out.println(maxSum(x1)); // 8        System.out.println(maxSum(x2)); // 9        System.out.println(maxSum(x3)); //-2    }}

6.用递归实现字符串倒转

public class StringReverse {       public static String reverse(String originStr) {           if(originStr == null || originStr.length()== 1) {               return originStr;        }        return reverse(originStr.substring(1))+ originStr.charAt(0);    }    public static void main(String[] args) {           System.out.println(reverse("hello"));    }}

7.输入一个正整数,将其分解为素数的乘积。

import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class DecomposeInteger {       private static List
list = new ArrayList
(); public static void main(String[] args) { System.out.print("请输入一个数: "); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); decomposeNumber(n); System.out.print(n + " = "); for(int i = 0; i < list.size() - 1; i++) { System.out.print(list.get(i) + " * "); } System.out.println(list.get(list.size() - 1)); } public static void decomposeNumber(int n) { if(isPrime(n)) { list.add(n); list.add(1); } else { doIt(n, (int)Math.sqrt(n)); } } public static void doIt(int n, int div) { if(isPrime(div) && n % div == 0) { list.add(div); decomposeNumber(n / div); } else { doIt(n, div - 1); } } public static boolean isPrime(int n) { for(int i = 2; i <= Math.sqrt(n);i++) { if(n % i == 0) { return false; } } return true; }}

8.一个有n级的台阶,一次可以走1级、2级或3级,问走完n级台阶有多少种走法。

public class GoSteps {       public static int countWays(int n) {           if(n < 0) {               return 0;        }        else if(n == 0) {               return 1;        }        else {               return countWays(n - 1) + countWays(n - 2) + countWays(n -3);        }    }    public static void main(String[] args) {           System.out.println(countWays(5)); // 13    }}

9.写一个算法判断一个英文单词的所有字母是否全都不同(不区分大小写)

public class AllNotTheSame {   public static boolean judge(String str) {   String temp = str.toLowerCase();int[] letterCounter = new int[26];for(int i = 0; i 
1) { return false;}}return true;}public static void main(String[] args) { System.out.println(judge("hello"));System.out.print(judge("smile"));}}

10.有一个已经排好序的整数数组,其中存在重复元素,请将重复元素删除掉,例如,A= [1, 1, 2, 2, 3],处理之后的数组应当为A= [1, 2, 3]。

public class RemoveDuplication {   public static int[] removeDuplicates(int a[]) {   if(a.length <= 1) {   return a;}int index = 0;for(int i = 1; i < a.length; i++) {   if(a[index] != a[i]) {   a[++index] = a[i];}}int[] b = new int[index + 1];System.arraycopy(a, 0, b, 0, b.length);return b;}public static void main(String[] args) {   int[] a = {   1, 1, 2, 2, 3};a = removeDuplicates(a);System.out.println(Arrays.toString(a));}}

11.给一个数组,其中有一个重复元素占半数以上,找出这个元素。

public class FindMost {   public static 
T find(T[] x){ T temp = null;for(int i = 0, nTimes = 0; i< x.length;i++) { if(nTimes == 0) { temp= x[i];nTimes= 1;}else { if(x[i].equals(temp)) { nTimes++;}else { nTimes--;}}}return temp;}public static void main(String[] args) { String[]strs = { "hello","kiss","hello","hello","maybe"};System.out.println(find(strs));}}

12.编写一个方法求一个字符串的字节长度?

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();            double num=1;         while (n!=0){                num = num*n;             n = n-1;         }            System.out.println(Number(num));        }    }    public  static  int Number(double n){           int count=0;        while (n%10==0){               count++;            n = n/10;        }        return count;    }}public int getWordCount(String s){       int length = 0;    for(int i = 0; i < s.length(); i++)    {           int ascii = Character.codePointAt(s, i);        if(ascii >= 0 && ascii <=255)            length++;        else            length += 2;    }    return length;}

总结

希望大家可以多多练习!

上一篇:微信小程序云开发打车系统实现附源码
下一篇:三握,四挥,滑动窗口会了吗?图解带你20分钟搞定TCP传输层

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年04月12日 23时44分43秒