我已经用 javascript 为 this 编写了这段代码黑客等级挑战:
function main() {
var t = parseInt(readLine());
for(var a0 = 0; a0 < t; a0++){
var n = parseInt(readLine());
if(n < 3) {
process.stdout.write("-1\n");
} else if(n % 5 == 0 && n % 3 != 0) {
for(var i = 0; i < n; i++) {
process.stdout.write("3");
}
process.stdout.write("\n");
} else if(n % 3 == 0 && n % 5 != 0) {
for(var i = 0; i < n; i++) {
process.stdout.write("5");
}
process.stdout.write("\n");
} else if(n % 5 != 0 && n % 3 != 0) {
var nts = 5;
n -= 5;
while(n % 3 != 0) {
n -= 5;
nts += 5;
}
for(var i = 0; i < n; i++) {
process.stdout.write("5");
}
for(var i = 0; i < nts; i++) {
process.stdout.write("3");
}
process.stdout.write("\n");
} else if(n % 15 == 0) {
for(var i = 0; i < n; i++) {
process.stdout.write("5");
}
process.stdout.write("\n");
}
}
}
它通过了测试用例 0、1、2、4、5 和 10,但没有通过其他测试用例。我究竟做错了什么?不要告诉正确的解决方案。我认为只要一个提示就可以了。 :P
最佳答案
这里有一些提示,如果你不想要一个可行的解决方案,请不要看下面的代码:)
1.如果N小于3,就没有像样的数
2. 5越多数字越大,因为我们想要尽可能大的数字,所以在看3之前我们先看看能放多少个5
3. 如果 N 是 3 的倍数,那么最大可能的数就是全 5
4.如果N不是3的倍数,看能放多少个5,留出足够的空间给一些3
例如。 N = 19 ... 记住 3 的个数只能是 5 的倍数(0 或 5 或 10 或 15 ... 等等)
第一次尝试 - 会说 18 个 5 和 1 个 3('s) - 这是无效的
因此,将 5 的数量减少 3,然后重试
第二次尝试 - 15 个 5 和 4 个 3 - 仍然无效
因此,将 5 的数量减少 3,然后重试
第三次尝试 - 12 个 5 和 7 个 3 - 仍然无效
因此,将 5 的数量减少 3,然后重试
第 4 次尝试 - 9 个 5 和 10 个 3 - 有效!!
希望对你有所帮助
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt();
for(int a0 = 0; a0 < t; a0++){
int n = in.nextInt();
if(n<3){
printNumber(0,0);
}
else if(n%3==0){
printNumber(n,0);
}
else {
int rem = n%3;
int k = 5;
boolean divides = false;
while(k<=n){
divides = (k-rem)%3==0;
if(divides){
break;
}
k+=5;
}
if(divides){
printNumber(n-k,k);
} else{
printNumber(0,0);
}
}
}
}
private static void printNumber(int fives, int threes) {
if(fives== 0 && threes==0) {
System.out.println("-1");
return;
}
StringBuilder sb = new StringBuilder();
while(fives>0){
sb.append("5");fives--;
}
while(threes>0){
sb.append("3");threes--;
}
System.out.println(sb.toString());
}
}
关于javascript - 夏洛克与野兽 - Hackerrank,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36249453/