我需要一些关于以下逻辑的输入。
它是一种计费系统,接受输入并具有与其关联的值。
A = 2 , 3A = 5
B = 3
C = 1 , 4C = 3我的代码,应该是这样的ABCCBAACCA,输出应该是16的值。
到目前为止,我的解决方案是计算字符串中的每个元素,并将A的模数为3,C的模数为4(就像上面的情况一样,B的情况下不需要),以获得结果。
我很困惑,为了实现这样的系统,我应该使用什么数据结构。
发布于 2012-05-11 23:44:23
在伪代码中,我相信它会是:
数数所有的A,B和C
<代码>H19模C乘以4<代码>H210<代码>G211
将5个结果求和。
在Ruby中,它可能像这样:
input = "ABCCBAACCA"
letters = ["A", "B", "C"]
total = 0
def score(letter,count)
if letter == "A"
((count/3)*5)+((count%3)*2)
elsif letter == "B"
count*3
else letter == "C"
((count/4)*3)+(count%4)
end
end
letters.each do |letter|
puts "#{letter}: #{score(letter, input.count(letter))}"
total += score(letter, input.count(letter))
end
puts "Total: #{total}"这会产生:
A: 7
B: 6
C: 3
Total: 16发布于 2012-05-11 23:37:06
嗯,模运算符不会帮到你,因为你每次都会得到0,是3的倍数还是5的倍数,这取决于你评估的字母(如果这是你试图描述的,如果我弄错了,很抱歉)。
我认为最简单的方法是扫描字符串,然后将值相加。
当你遇到第三个A时,你只需添加1,而不是2(因为你必须减去4,然后添加5)与C类似,当你遇到第四个C时,您只需添加0,而不是1。
你需要两个额外的变量来保持A和C的实例,是的,你可以使用模运算符来知道你是否刚刚到达倍数,你必须添加1或0,这取决于具体情况。
希望这能对你有所帮助。
编辑:在这里,我做了一个快速实现。如果您真的需要它,请随意优化它;)
String value = "ABCCBAACCA";
int numA =0;
int numC =0;
int endResult = 0;
for (int x = 0; x < value.length(); x++)
{
if (value.charAt(x) =='A')
{
numA = numA +1;
endResult = endResult + ((numA%3 == 0)?1:2);
}
else if (value.charAt(x) =='B')
{
endResult = endResult +3;
}
else if (value.charAt(x) =='C')
{
numC = numC +1;
endResult = endResult + ((numC%4 == 0)?0:1);
}
}
System.out.println(endResult); //16 as expected发布于 2012-05-12 00:01:22
好吧,我会从下面这样的东西开始:
public static void main(String[] args) {
// FIXME
String inputString = null;
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (Character c : inputString.toCharArray()) {
map = countCharacters(map, c);
}
}
private static Map<Character, Integer> countCharacters(Map<Character, Integer> map,
Character charatcer) {
map.put(charatcer,
(map.get(charatcer) != null) ? map.get(charatcer) + 1 :
Integer.valueOf(1));
return map;
}然后介绍@vlasits从第二步到第五步的步骤,因为上面的代码是他伪代码中的第一步。它通过生成" character“:"its Occurences”的映射来计算字符串中的所有字符,如果之前没有这样的字符,则将1放到映射中。
https://stackoverflow.com/questions/10554114
复制相似问题