對不起大家誰寫的「下半場應該是相似的」 ......這不是。
總之,在這裏你去:
// traverse array diagonally
int c, tmp, x;
for (c = N - 1; c > -N; c--) {
tmp = N - abs(c) - 1;
x = tmp;
while (x >= 0) {
if (c >= 0) {
std::cout << arr[x][tmp - x] << ", ";
}
else {
std::cout << arr[N - (tmp - x) - 1][(N-1)-x] << ", ";
}
--x;
}
std::cout << "\n";
}
你需要這個遊戲還是什麼?
[編輯]再看一遍,我想我的答案寫得不是很好。這裏快速運行:
讓我們假裝N是3。
我們需要的是一個迭代上座標組合,看起來像這樣:
(0, 0)
(1, 0), (0, 1)
(2, 0), (1, 1), (0, 2)
(2, 1), (1, 2)
(2, 2)
所以第一部分的佔位符:
int c, // a counter, set by the outer loop
tmp, // for intermediate results
x; // the x-index into *arr* (*y* will be defined implicitly)
現在這個外環
for (c = N - 1; c > -N; c--) {
品牌c迭代{2,1,0,-1,2}。
下一步
tmp = N - abs(c) - 1;
x = tmp;
接通{2,1,0,-1,-2}成{0,1,2,1,0},它們的長度這一步所需的輸出減1(因此它們可以用作索引)。我們製作了兩份,tmp和x。
現在我們指望從X到:
while (x >= 0) {
...
--x;
}
如果我們對ARR左上半部,由C> = 0中,x表示-indices into arr需要從對角線開始並下降到零(0到0,1到0和2到0),而y指數需要從零開始並上到對角線(0到0,0到1和0〜2):
if (c >= 0) {
std::cout << arr[x][tmp - x] << ", ";
}
一次我們是在右下半,在x指數需要開始在ñ和向下對角線(2比1和2 2),而Y型指數需要開始在對角線上去N(1至2和2比2):
else {
std::cout << arr[N - (tmp - x) - 1][(N-1)-x] << ", ";
}
最後,我們只需要在一個換行符每行末尾:
std::cout << "\n";
Savy? :-)
看起來像功課嗎? :P – evgeny 2011-05-27 09:37:48
哈哈這是真的,這種問題的措辭像一個硬件問題,但它實際上不是;) – Demi 2011-05-27 09:41:22
JPEG的曲折遍歷? – 2011-05-27 09:41:58