我知道這可能很簡單,但我似乎無法理解如何垂直寫入整數。例如,有一個帶有4個整數,這是9,21,63,和501,其結果將是一個數組以下垂直寫入數組的整數
9 2 5 6
1 0 3
1
這是我計劃的一小步,也許最簡單的,但我可以「不懂怎麼辦呢:( 有人可以幫我或引導我,讓我可以完成我的計劃
我知道這可能很簡單,但我似乎無法理解如何垂直寫入整數。例如,有一個帶有4個整數,這是9,21,63,和501,其結果將是一個數組以下垂直寫入數組的整數
9 2 5 6
1 0 3
1
這是我計劃的一小步,也許最簡單的,但我可以「不懂怎麼辦呢:( 有人可以幫我或引導我,讓我可以完成我的計劃
試試這個僞代碼
int[] list = new int[] {9,21,63,501};
bool finished = false;
if (list.Count > 0) {
for (var j=0;!finshed; j++) {
finished = true;
for (var i = 0; i<list.Count;i++) {
String val = list[i].ToString();
if (val.length>j) {
write(val.charAt(j));
finished = false;
}
}
}
}
這不是僞代碼。 – mre 2013-02-20 02:36:16
我創建了一個非常模塊化和易於理解的解決方案。
編輯:將digitAtIndex()
轉換爲純粹的數值計算。
保留原文並將其命名爲digitAtStrIndex()
。
public class IntegerColumns {
public IntegerColumns() {
int[] arr = new int[] {9, 21, 501, 63};
printColumnMajorOrder(arr);
}
public static void main(String[] args) {
new IntegerColumns();
}
// --------------------- Primary Functions --------------------------
// Prints out an Array of Integers, each in a vertical column
public void printColumnMajorOrder(int[] arr) {
int cols = arr.length;
int rows = maxDigits(arr);
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
int d = digitAtIndex(arr[c], r);
System.out.printf("%s\t", d >= 0 ? Integer.toString(d) : " ");
}
System.out.println();
}
}
// Returns the length of an Integer
public int numDigits(int i) {
if (i <= 0) return 0;
return (int)Math.floor(Math.log10(i))+1;
}
// Numeric calculation to find a digit at a specified index
public int digitAtIndex(int num, int index) {
int digits = numDigits(num);
int deg = digits - index - 1;
int pow = (int)Math.pow(10, deg);
return pow > 0 ? (int)(num/pow)%10 : -1;
}
// Returns the number of digits for the longest Integer in an Array
public int maxDigits(int[] arr) {
int max = 0;
for (int i : arr) {
int size = numDigits(i);
if (size > max) max = size;
}
return max;
}
// ---------------------- Extra Functions ---------------------------
// Hybrid of Integer and Substrings - String manipulation = slow
public int digitAtStrIndex(int number, int i) {
String n = Integer.toString(number);
return n.length() > i ? Integer.parseInt(n.substring(i, i+1)) : -1;
}
// Prints the digits of a number vertically
public void printNumberVertical(int num) {
for (int i = 0; i < numDigits(num); i++)
System.out.println(digitAtIndex(num, i));
}
}
`公共類VerticalPrintService {
private int[] data;
public VerticalPrintService(int[] intArray) {
this.data = intArray;
}
public void printVertically(){
int cols = data.length; // # of columns
int rows = getRows(); // # of rows
System.out.println("cols: " + cols);
System.out.println("rows: " + rows);
String[][] matrix = new String[rows][cols];
int rowIndex = 0;
int colIndex = 0;
// populate 2d array
for (int i : data) {
String str = String.valueOf(i);
for (int j = 0; j < str.length(); j++) {
matrix[rowIndex][colIndex] = String.valueOf(str.charAt(j));
rowIndex++;
}
colIndex++;
rowIndex = 0;
}
// print
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (null == matrix[i][j]) {
System.out.print("\t");
} else {
System.out.print(matrix[i][j] + "\t");
}
}
System.out.println();
}
}
private int getRows(){
int max = 0;
for (int i : data) {
int len = String.valueOf(i).length();
if (len > max) {
max = len;
}
}
return max;
}
}`
和在主方法
`公共靜態無效的主要(字串[] args){
int[] array = { 9, 53, 501, 90 };
VerticalPrintService vps = new VerticalPrintService(array);
vps.printVertically();
}`
爲什麼文本和示例之間的順序不同? – 2013-02-20 02:06:33
這不一定容易,但應該是可行的,試試看,如果你有麻煩回來這裏 – 2013-02-20 02:06:33
[你有什麼嘗試?](http://mattgemmell.com/2008/12/08/what-have你試過/) – 2013-02-20 02:11:46