您的位置:首页 > 职场人生

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

2016-06-19 11:26 351 查看
一个简单程序题的记录。

题目: 实现输入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]+"]");
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: