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

一个简单程序题的记录。

题目: 实现输入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]+"]");
			}
		}
	}
}




转载于:https://www.cnblogs.com/actanble/p/6713460.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值