- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我用了大约 20 分钟写出了这个程序,并花了最后 40 分钟绞尽脑汁地想为什么它返回 21131 而不是 21124,这似乎是正确的答案。我知道代码没有问题(很可能),因为它适用于我测试的每个数字,这可能是我不久前就应该想出的一些愚蠢的东西..这是代码:
public class Euler17 {
public static final String[] numbers = new String[]{"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
public static final String[] tens = new String[]{"", "Ten ", "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "};
public static final String[] teens = new String[]{"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
public static void main (String [] args) {
int sum = 0;
for (int a = 0; a <= 1000; a++){
sum+= toWords(a).replace(" ", "").length();
}
System.out.println(sum);
}
public static String toWords(int a){
String w = "";
// handle the 1000s ;)
if (a / 1000 > 0){
w+= numbers[((a % 10000) / 1000)] + " thousand ";
}
// handle the 100s
if (a / 100 > 0){
w+= numbers[((a % 1000) / 100)] + " hundred";
if (a % 100 == 0){
return w;
}
w+= " and ";
}
// handle the teens
if ((a / 10) % 10 == 1){
return w + teens[a % 10];
}
// handle the tens
if (a / 10 > 0){
w+= tens[((a % 100)/ 10)];
}
// handle the ones
return w + numbers[a % 10];
}
}
最佳答案
我知道我的回答有点晚了,但希望能帮到你。
我刚刚看到你的问题并对自己说让我们尝试一下。无论如何,我尝试解决您遇到的问题,但是,由于变量
命名和其他问题,我无法跟上。
我在下面实现的解决方案使用HashMap
来解决手头的问题。我已尽力至少在代码中提供注释,因此如果您需要任何进一步的解释,请随时提供注释。
类内的全局变量:
private static Map<Integer,String> wordsCollection = new HashMap<>();
private static String andWord = "and", oneThousand = "onethousand";
解决问题的方法:
private static void PE_Problem_17(){
wordsCollection.put(1,"one"); wordsCollection.put(2,"two"); wordsCollection.put(3,"three");
wordsCollection.put(4,"four"); wordsCollection.put(5,"five"); wordsCollection.put(6,"six");
wordsCollection.put(7,"seven"); wordsCollection.put(8,"eight"); wordsCollection.put(9,"nine");
wordsCollection.put(10,"ten"); wordsCollection.put(11,"eleven"); wordsCollection.put(12,"twelve");
wordsCollection.put(13,"thirteen"); wordsCollection.put(14,"fourteen"); wordsCollection.put(15,"fifteen");
wordsCollection.put(16,"sixteen"); wordsCollection.put(17,"seventeen"); wordsCollection.put(18,"eighteen");
wordsCollection.put(19,"nineteen"); wordsCollection.put(20,"twenty"); wordsCollection.put(30,"thirty");
wordsCollection.put(40,"forty"); wordsCollection.put(50,"fifty"); wordsCollection.put(60,"sixty");
wordsCollection.put(70,"seventy"); wordsCollection.put(80,"eighty"); wordsCollection.put(90,"ninety");
wordsCollection.put(100,"hundred");
int countLetters = oneThousand.length();
for (int number = 1; number <= 999; number++){
if(number <= 20) {
countLetters += wordsCollection.get(number).length(); // handle from 1 to 20
continue;
}
if(number <= 99) { // handle two digit numbers
countLetters += examineTwoDigits(number);
continue;
}
if(number <= 999){ // handle three digit numbers
countLetters += examineThreeDigits(number);
}
}
System.out.println("Result = " + countLetters); // print the result
}
两位数字的帮助方法:
private static int examineTwoDigits(int number){ // helper method for two digit numbers
int tempCount = 0;
if(number == 0) return 0;
if(number >= 1 && number <= 9){
tempCount += wordsCollection.get(number).length(); // get length of number from hashMap
return tempCount;
}
if(number % 10 == 0){
tempCount += wordsCollection.get(number).length(); // get length of number from hashMap
return tempCount;
}
for(int i = 1; i <= 20; i++){
if(i == number) {
tempCount += wordsCollection.get(number).length(); // get length of number from hashMap
return tempCount;
}
}
int leftNumber = number / 10;
String leftNumberString = Integer.toString(leftNumber) + "0";
int rightNumber = number % 10;
tempCount += wordsCollection.get(Integer.parseInt(leftNumberString)).length();
tempCount += wordsCollection.get(rightNumber).length();
return tempCount; // return the length of words count
}
三位数的帮助方法:
private static int examineThreeDigits(int number){ // helper method for 3 digits
int tempCount = 0;
int leftMostDigit = number / 100; // get leftMost digit
tempCount += wordsCollection.get(leftMostDigit).length() + wordsCollection.get(100).length();
StringBuilder builder = new StringBuilder(Integer.toString(number));
builder.deleteCharAt(0);
if(Integer.parseInt(builder.substring(0,1)) != 0 || Integer.parseInt(builder.substring(1,2)) != 0){
tempCount+= andWord.length();
}
tempCount += examineTwoDigits(Integer.parseInt(builder.toString()));
return tempCount;
}
关于java - Java 中的 Project Euler #17(落后 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42737279/
let config = [{ name: 1, state: 1, output: 'Y', }, { name: 2, state: 1, outp
我在使用 C# 统一编程时遇到了一些问题。我试图在开始游戏时请求一个插页式广告,这样我就可以在玩家死亡 5 次时显示它。问题是,当我遇到第 5 次死亡时,广告将不会显示。当我尝试在关卡开始时请求广告时
我有 JPanel,从中打开一个扩展 AbstractAIFDialog 的搜索条件对话框。它由搜索条件文本字段、结果 TableView 和搜索按钮组成。单击“搜索”后,在此对话框中,我需要显示进度
所以,我的蛇做了连续的运动,但如果我按任意键,它就会及时倒退并前后滞后。这是视频:https://youtu.be/KCesu5bGiS8 我的猜测是更快地更新按键输入,但是当我这样做时,所有内容都会
我正在尝试获得 TODAY THE CURRENT 的所有选票,并且我几乎已经通过以下 mysql 查询实现了这一点,但是有一个问题。 这段代码让我获得了今天的选票: SELECT COUNT(*)
我正在使用 RS256 算法生成 Azure AD token 。 当我解码 https://jwt.io/ 中的 token 时发出的时间比请求时间晚了 5 分钟。 请求的时间:美国标准时间晚上 9
当我查询 NOW() 时,mysql 返回的时间与服务器上的当前时间相差大约 -30 秒。有任何想法吗?我尝试查看配置文件,但一无所获。我正在运行 5.1.37 版本 SELECT NOW() 最佳答
我正在做一个开源项目。我首先 fork 这个项目,将它克隆到我的机器上,然后直接在 master 分支上进行了更改。我提交了这些更改并将其推到我的 fork 上。然后我打开了该更改的 pull 请求。
所以我用了大约 20 分钟写出了这个程序,并花了最后 40 分钟绞尽脑汁地想为什么它返回 21131 而不是 21124,这似乎是正确的答案。我知道代码没有问题(很可能),因为它适用于我测试的每个数字
我在使用 QueryDsl 日期算法时遇到问题。它对我不起作用,会引发以下错误: Caused by: org.postgresql.util.PSQLException: ERROR: functi
嗨,我正在玩 Angular ui 时间选择器 http://angular-ui.github.io/bootstrap/ 当我使用它时,我的日期晚了 1 小时,我该如何更改它以及为什么? JS
我是一名优秀的程序员,十分优秀!