[英]A method for calculating the frequency of digits
我编写了一个类,通过将两位数相加来求出整数的总和。 例如0, 5, 12, 213, 999 and 1111
的数字总和分别是` 0, 5, 12, 213, 999 and 1111
和 4。 我需要写一个方法:
public static double digitTotalFrequency(int max, int digitTotal)
此方法应return
具有给定digitTotal
的所有数字在 0, 1...max 范围内的数字的比例。 例如, digitTotalFrequency(9, 3)
是0.1
因为前 10 个数字中只有一个数字的总位数为 3。此外, digitTotalFrequency(99,3)
是0.04
(因为在前 100 个数字中只有数字 3, 12、21 和 30 的 digitTotal 为 30)。 我正在努力做到这一点,请帮助,谢谢。
public static double digitTotalFrequency(int max, int digitTotal){
int number = max;
while (number>0) {
digitTotal = digitTotal + (number%10);
number = number/10;
}
return digitTotal/max;
}
你需要把你的任务分成两部分
例如,12 和 21 的数字总和将是相同的。 因此您需要将此信息存储在某处以便再次使用它。 这将减少您所做的工作量。
这被称为动态规划或记忆化。
试着稍微考虑一下。 如果你挣扎,我可以让你开始一些代码
编辑:程序代码
试着通读这篇文章,看看到底发生了什么
public class Jnk {
public static void main(String[] args) {
System.out.println(digitTotalFrequency(99,3));
}
public static double digitTotalFrequency(int max, int digitTotal){
HashMap<String,Integer> counts = new HashMap<String,Integer>();
counts.put("0", 0);
counts.put("1", 1);
counts.put("2", 2);
counts.put("3", 3);
counts.put("4", 4);
counts.put("5", 5);
counts.put("6", 6);
counts.put("7", 7);
counts.put("8", 8);
counts.put("9", 9);
int [] runs = new int[1];
if(max<=10)
return (double)digitTotal/max;
else
getTotal(0,max,counts,runs,digitTotal);
return (double)runs[0]/max;
}
private static void getTotal(int currentNumber, int max, HashMap<String, Integer> counts,int [] runs, int target) {
if(currentNumber==max)
return;
String key = getKey(currentNumber);
if(counts.containsKey(key))
{
int total = counts.get(key);
if (total==target)
{
System.out.println("Found "+currentNumber);
runs[0] += 1;
}
getTotal(currentNumber+1,max,counts,runs,target);
}
else
{
int total = getDigitCount(currentNumber);
counts.put(key, total);
if (total==target)
{
System.out.println("Found "+currentNumber);
runs[0] += 1;
}
getTotal(currentNumber+1,max,counts,runs,target);
}
}
private static Integer getDigitCount(int currentNumber) {
int digitTotal = 0;
while (currentNumber>0) {
digitTotal = digitTotal + (currentNumber%10);
currentNumber = currentNumber/10;
}
return digitTotal;
}
private static String getKey(int min) {
String number = String.valueOf(min);
char[] numberArray = number.toCharArray();
Arrays.sort(numberArray);
String key = String.valueOf(numberArray);
return key;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.