一个简单程序题的记录。
题目: 实现输入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]+"]"); } } } }