Java I';我坚持这个逻辑程序好几天了。有人能帮我弄清楚吗?
挑战 输入:标准输入 输出:标准输出 时限:3秒 这是另一个星期天晚上在codecity,和往常一样,许多编码挑战正在被宣布。我们的英雄Bob发现其中一个挑战非常有趣,并尝试了一下。挑战是给定两个整数a和B,Bob应该找出[a…B]范围内的数字包含不包含出现两次以上的数字。为Bob编写计算机程序以解决此问题 输入: 第一行包含测试用例T的数量。接下来的每一行包含两个整数,A和B 输出: 输出T行,每个案例一行,包含对应案例的所需答案 限制条件:Java I';我坚持这个逻辑程序好几天了。有人能帮我弄清楚吗?,java,logic,Java,Logic,挑战 输入:标准输入 输出:标准输出 时限:3秒 这是另一个星期天晚上在codecity,和往常一样,许多编码挑战正在被宣布。我们的英雄Bob发现其中一个挑战非常有趣,并尝试了一下。挑战是给定两个整数a和B,Bob应该找出[a…B]范围内的数字包含不包含出现两次以上的数字。为Bob编写计算机程序以解决此问题 输入: 第一行包含测试用例T的数量。接下来的每一行包含两个整数,A和B 输出: 输出T行,每个案例一行,包含对应案例的所需答案 限制条件: 1Edit:我还在main中添加了标准IO的读数。
1Edit:我还在main中添加了标准IO的读数。解决方案现在应该已经完成了,除了您还可以内置的需求之外。我已经评论过了,所以你知道发生了什么。它可能不是最有效/最优雅的解决方案,因此欢迎改进:
public static int getNumbers(int a, int b){
//Return if invalid input
if(b < a){
return -1;
}
int counter = 0;
//Iterate over all numbers from the range
for(int i = a; i <= b; ++i){
boolean validNumber = true;
//List of digits - we will put how many we have in here
int[] digits = new int[10];
//Split the number into digits
int number = i;
while(number > 0){
//Get current digit
int currentDigit = number % 10;
//Increment the number of these digits found
++digits[currentDigit];
//If number greater than 4, set flag and break loop
if(digits[currentDigit] > 2){
validNumber = false;
break;
}
//Divide by 10 to get the next digit
number = number / 10;
}
//Ig the number is valid, increase counter
if(validNumber == true){
++counter;
}
}
return counter;
}
输出:
20
0
331
-1
Please Enter The Number of test cases:
1
Please Enter A:
100
Please Enter B:
120
20
顺便说一句,我不明白这个要求:1…你试过什么?我无法理解逻辑。我试过使用for循环。但我无法理解“包含不包含发生两次以上的数字”这一点!如果他知道数字,为什么答案是20?101似乎是一个有效的数字。或者他应该找出这个范围中有多少个数字?也许你可以粘贴一些代码,这样我们就可以看到你错在哪里了谢谢!)你的代码确实帮助我更好地理解了逻辑。后来我被纠正,约束是10^8,而不是10^4。不管怎样,我编辑了那个部分并完成了。谢谢你的努力:)不客气,@AnkitPanchal。很高兴我能帮忙。顺便说一句:我13岁的时候在Delphi做了我的第一个程序,所以坚持下去,你在正确的轨道上!英雄联盟我希望有一天能像你们一样,在几分钟内解决任何挑战。灵感:)
20
0
331
-1
Please Enter The Number of test cases:
1
Please Enter A:
100
Please Enter B:
120
20