zoukankan      html  css  js  c++  java
  • 一道简单面试题和霍尔规则

    一个简单程序题的记录。

    题目: 实现输入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考生[递归]的输出:"+"
    "+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考生[字符串拼接]的输出:"+"
    "+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("大部分考生[正常方法]的输出:"+"
    "+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]+"]");
    			}
    		}
    	}
    }
    




  • 相关阅读:
    C#使用表达式树实现对象复制
    用vbs将字符串复制到剪贴板
    C# 动态获取程序集信息
    关于ftp的主动模式(Active Mode)和被动模式(Passive Mode)
    %userprofile%\Local Settings文件夹拒绝访问怎么办
    在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
    ABP VNext框架基础知识介绍(1)框架基础类继承关系
    ABP开发框架中分页查询排序的实现处理
    Vue&Element开发框架中增加工作流处理,工作流的各个管理页面的界面处理
    基于ABP开发框架的技术点分析和项目快速开发实现
  • 原文地址:https://www.cnblogs.com/actanble/p/6713460.html
Copyright © 2011-2022 走看看