【发布时间】:2011-09-11 07:42:28
【问题描述】:
特别是对于 Java,该解决方案基本上应该适用于其他语言。
例如,12345 将返回 3。
谢谢。
【问题讨论】:
特别是对于 Java,该解决方案基本上应该适用于其他语言。
例如,12345 将返回 3。
谢谢。
【问题讨论】:
递归解:
double averageDigits(int number, int sum, int count) {
if(number==0) {
if(count==0) {
return 0;
}
return ((double) sum) / ((double) count);
}
else {
return averageDigits(number/10, sum + number % 10, ++count);
}
}
【讨论】:
如果您只有整数,您可能需要检查 mod "%" 和简单除法 "/" 并将其与循环结合以计算和求和数字部分。
【讨论】:
在伪代码中:
在挖掘列表中拆分数字,然后计算平均递归
double avg(List<Integer> list) {
if(list.length==0) return 0;
else return (list.get(0)+ (avg(list.sublist(1)*(lisr.length()-1)))
/list.length();
}
【讨论】:
不了解java,用javascript,这会工作
function avrg(arr){
avrg.arr = avrg.arr || arr.slice();
avrg.l = avrg.l || 1/arr.length;
return arr.length ? (avrg.l*avrg.arr.pop()+avrg(avrg.arr)) : 0;
}
【讨论】:
public String getAverage(String num) {
try {
Integer.parseInt(num);
} catch (NumberFormatException e) {
return "Invalid number";
}
int length = num.length();
int total;
int i;
String[] digits = num.split("");
for (String s : digits) {
i = Integer.parseInt(s);
total += i;
}
return (total / length).toString();
}
【讨论】:
这就是诀窍:
public class DigitAverage {
public static void main(String[] args) {
System.out.println(digitAverage(12345));
}
private static double digitAverage(int remainder, int... depth) {
boolean first = false;
if (depth.length == 0) {
depth = new int[] { 1 };
first = true;
} else {
depth[0] = depth[0] + 1;
}
if (remainder < 10) {
return remainder;
}
double result = remainder % 10 + digitAverage(remainder / 10, depth);
if (first) {
result = result / depth[0];
}
return result;
}
}
注意这个函数只需要输入数字,调用者没有初始化递归的内部“簿记”参数。
【讨论】: