我目前正在解决此问题https://www.hackerrank.com/challenges/encryption。
这是我到目前为止所拥有的
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);
String input = in.nextLine();
double length = input.length();
int width = (int) Math.ceil(Math.sqrt(length));
int height = (int) Math.floor(Math.sqrt(length));
char[] letters = input.toCharArray();
char[][] matrix = new char[height][width];
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
if ((j + i * width) < letters.length) {matrix[i][j] = letters[j + i * width];}
}
}
StringBuffer encrypted = new StringBuffer();
for (int cols = 0; cols < width; cols++) {
for (int rows = 0; rows < height; rows++) {
encrypted.append(matrix[rows][cols]);
}
encrypted.append(' ');
}
System.out.println(encrypted.toString());
}
}
案件失败&#34; feedthedog&#34; - 我打印&#34; fto ehg ee&#34;而不是答案&#34; fto ehg ee dd。&#34;此外,似乎我永远无法得到第二个for循环的最后一次迭代,我似乎无法找出原因。非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
&#34;确保,身高*宽度&gt; = len(字)&#34;
你在循环中检查这一点,首先是因为高度和宽度已知,因此本质上是不好的。但是你应该用它来检查宽度和高度,如果他们不满足约束就调整它们。锻炼是有缺陷的,因为它没有说是否应首先扩大宽度或高度。
你假设高度始终是地面,宽度总是ciel,而在这种情况下,身高比它应该少一个,这就是为什么它没有完成。
编辑:虽然楼层(sqrt(len(字)))&lt; = width,height&lt; = ceil(sqrt(len(word)))可能意味着width = ... floor,height = ... ciel,这句话写得好像是一种向量,而如果不是这样,他们应该使用分号。但如果是这样,你只需要向后宽度和高度 并且您正在使用cols&lt;宽度,行&lt;高度。
这也不是真正的密码,因为它不可逆。