Đây thực sự là một câu hỏi phỏng vấn. Tôi đã phải in bằng cách sử dụng Java sau:Cách in chuỗi sau, trong khi thỏa mãn các điều kiện này
9
9 8 9
9 8 7 8 9
9 8 7 6 7 8 9
. . .
. . .
Trong cuộc phỏng vấn, tôi đã viết một mảnh xấu hổ mã, nhưng nó làm việc dù sao - sử dụng một vòng lặp bên ngoài, hai vòng bên trong (một cho chuỗi decrementing và một cho chuỗi tăng dần!) và một tấn biến. Một trong các biến là độ dài của mỗi hàng.
Người phỏng vấn hỏi tôi để thử và viết lại nó bằng cách sử
chỉ là một bên ngoài và một vòng lặp bên trong
mà không biến chiều dài hàng.
Lưu ý: Sau khi xem câu trả lời, tôi nghĩ người phỏng vấn không thực sự có nghĩa là điều kiện thứ hai. Anh ta có thể chỉ muốn tôi đơn giản hóa mã của tôi và điểm thứ hai chỉ lẩm bẩm ra khỏi miệng anh ta.
Vì vậy, sau đó trở về nhà, tôi đến đây:
int rowCnt = 5;
for(int i = 1; i <= rowCnt; i++)
{
int val = 9;
int delta = -1;
int rowLen = i * 2 - 1;
for(int j = 1; j <= rowLen; j++)
{
System.out.print(val + " ");
val += delta;
if(j >= rowLen/2) delta = 1;
}
System.out.println();
}
Ở đây, tôi đang sử dụng chỉ là một vòng trong. Tôi đang sử dụng giá trị delta
để xác định xem số tiền tăng hoặc giảm có xảy ra hay không. Đối với mỗi hàng, tôi so sánh chỉ mục hiện tại với điểm giữa của hàng và thay đổi delta.
Tôi hài lòng với điều kiện đầu tiên - chỉ một vòng lặp bên trong. Nhưng tôi không thể làm điều đó mà không sử dụng độ dài hàng.
Làm cách nào chúng ta có thể in điều này mà không tìm ra độ dài hàng?
Nhiều câu trả lời có thể chấp nhận được, nhưng tôi phải chọn một câu trả lời và chọn câu trả lời đơn giản nhất để hiểu tôi.
Hãy thử 'StringBuilder': 'reverse' và' append', và một int decrementing duy nhất ... –
bạn không thể chỉ thay thế biểu hiện thực tế (tuyên bố) trong địa điểm của 'rowLen'? – SparKot
Lưu ý rằng bạn giảm '9'' currentRow - 1' lần. Bạn có thể sử dụng nó thay vì chiều dài hàng. Cả hai có liên quan mặc dù, do đó, nó có vẻ như một yêu cầu ngớ ngẩn không sử dụng chiều dài hàng, nhưng bất cứ điều gì. – IVlad