我在HackerRank上解决了这个问题 你可以在这里看到问题 https://www.hackerrank.com/contests/programming-jam-2-0/challenges/math-practice
你制定了一个策略,帮助你的孩子练习他的数学。首先,你选择一个正整数N.然后你告诉你的孩子开始命名N,3×N,5×N,7 x N等等。
每当他给一个号码命名时,他会想到该号码中的所有数字。他跟踪他至少看过一次的数字(0,1,2,3,4,5,6,7,8和9),直到他命名的任何数字为止。一旦他看过十个数字中的每一个至少一次,他就可以去玩了
还有我的代码但是当我提交它时给了我(没有对stdout做出回应) 我多次修改代码,我不知道错误在哪里 请任何人都可以帮忙
package contest;
import java.util.ArrayList;
import java.util.Scanner;
/**
*
* @author Mohamed
*/
public class Solution
{
public static void main(String [] s){
Scanner In = new Scanner(System.in);
int number = In.nextInt();
int counter = 1;
int length;
int oneDigit;
int newNumber;
int index;
boolean condition = true;
int [] arr = new int[10];
ArrayList<String> theList = new ArrayList<>();
while(condition = true){
length = (int)(Math.log10(number) + 1);
newNumber = number;
while(length > 0)
{
oneDigit = newNumber % 10;
newNumber = newNumber / 10;
if(arr[0] != oneDigit && arr[1] != oneDigit && arr[2] != oneDigit &&
arr[3] != oneDigit && arr[4] != oneDigit && arr[5] != oneDigit &&
arr[6] != oneDigit && arr[7] != oneDigit && arr[8] != oneDigit &&
arr[9] != oneDigit)
{
String num = String.valueOf(oneDigit);
theList.add(num);
index = theList.lastIndexOf(num);
arr[index] = oneDigit;
}
if(newNumber == 0){
length = 0;
}
else{
length = (int)(Math.log10(newNumber) + 1);
}
}
counter = counter + 2;
if(arr[9] != 0)
{
System.out.println(number);
condition = false;
}
number = number * counter;
}
}
}
答案 0 :(得分:0)
使用sets来填写所看到的数字。集合不允许重复
您的代码应如下所示:
Scanner In = new Scanner(System.in);
int number = In.nextInt();
int index = 1;
int newNum;
String message = "";
Set<Integer> numbersSeen = new HashSet<Integer>();
while(true)
{
newNum = number*index;
message += "N ="+number*index+". Now he has seen the digits ";
while(newNum > 0) {
numbersSeen.add(newNum % 10);
newNum /= 10;
}
for(Integer seenNum : numbersSeen) {
message += seenNum +", ";
}
System.out.println(message.substring(0,message.length()-2));
message = "";
index +=2;
if(numbersSeen.size() == 10) {
break;
}
}
答案 1 :(得分:-1)
在本地调试它!根据某些条件,它只有一个println
。如果不满足这个条件,你将没有任何印刷品。
另外,我建议进行一些重构以使代码更容易理解。
将条件变量重命名为有意义的内容。喜欢isArray9Zero。为什么算法仅在arr[9] != 0
?
从长{i f(arr[0] != oneDigit
中生成命名函数。在那里检查什么?