一道简单面试题和霍尔规则

来源:互联网 发布:常用的推荐系统算法 编辑:程序博客网 时间:2024/05/17 06:24

一个简单程序题的记录。

题目: 实现输入1-9的数字i时,完成对应1-i个i的逐步连加。

例如:<i = 5> 5 + 55 + 555 + 5555 + 55555

最简单的答案:

核心想法是:多部循环,一步执行,时间复杂度最小。

public static void Zyfunction(int k){int sum = 0;int s = k;String str = "";for (int i = 0; i < k; i++) {sum = sum + s;if (i == k-1) {str = str + new Integer(s).toString()+"=";}else{str = str + new Integer(s).toString()+"+";}s = 10*s + k;}System.out.println(str + sum);}
另外介绍几种在出题过程中考生容易作答的几种答案,复杂度都是n^2;显然不优良。

主要是单项处理环节的差异;就是处理输出k个i;

方法1,依照循环直接生成。

方法2,实现递归生成。

方法3,实现整形装箱字符串拼接生成。

public static void StuAfunction(int k){int sum = 0;String str  = "";for (int i = 0; i < k; i++) {sum  = sum + returnAi(k, i);if (i == k-1) {str = str + new Integer(returnAi(k, i)).toString()+"=";}else{str = str +  new Integer(returnAi(k, i)).toString()+"+";}}System.out.println("A考生[递归]的输出:"+"\n"+str + sum);}//返i个k<递归法>public static int returnAi(int k,int i){if(i == 0)return k;return 10*returnAi(k, i-1)+k;}//返回i个k字符拼接法public static int returnBi(int k,int i){String ss = new Integer(k).toString();String s = new Integer(k).toString();for (int j = 0; j < i; j++) {ss = ss + s; }int r = new Integer(ss);return r;}//过程同A这部分public static void StuBfunction(int k){int sum = 0;String str  = "";for (int i = 0; i < k; i++) {sum  = sum + returnBi(k, i);if (i == k-1) {str = str + new Integer(returnBi(k, i)).toString()+"=";}else{str = str +  new Integer(returnBi(k, i)).toString()+"+";}}System.out.println("B考生[字符串拼接]的输出:"+"\n"+str + sum);}//正常计算法public static int returnZi(int k,int i){int ai = 0;for (int j = 0; j < i+1; j++) {ai = ai * 10 +k;}return ai;}//ABZ三个方案这部分都是相同的public static void StuZfunction(int k){int sum = 0;String str  = "";for (int i = 0; i < k; i++) {sum  = sum + returnZi(k, i);if (i == k-1) {str = str + new Integer(returnZi(k, i)).toString()+"=";}else{str = str +  new Integer(returnZi(k, i)).toString()+"+";}}System.out.println("大部分考生[正常方法]的输出:"+"\n"+str + sum);}

给上一个main方法包含四种方法即可:

<span style="white-space:pre"></span>int k = 7;Zyfunction(k);StuAfunction(6);StuBfunction(7);StuZfunction(8);

下面介绍Huoer规则,同样是循环步骤的压缩,应用在多项式的求解中。

详情可百度。是看到这个题想到了以前有这个规则。所以附上。

package com.byk.霍尔规则;/**  多项式的计算 *霍尔规则 */public class Demo {public static void main(String[] args) {huoErRule(12);huoEr(12, 10);}public static void huoErRule(int k){String s = "A" + new Integer(k).toString();for (int i = k-1; i > -1; i--) {s = "A" + new Integer(i).toString() +"+"+ "x("+s+")";}System.out.println(s);}public static void huoEr(int n,int x){int[] arr = new int[n+1];for (int i = 0; i < arr.length; i++) {arr[i] = (int) (8*Math.random()+1);}printArray(arr);long s = 0;for (int i = n; i >= 0; i--) {s = arr[i] + s*x;}System.out.println(s);}public static void printArray(int[] arr){System.out.print("该数组为:[");for (int i = 0; i < arr.length; i++) {if (i< arr.length-1) {System.out.print(arr[i]+",");}else{System.out.println(arr[i]+"]");}}}}




0 0