螺旋三角形 (二)
参考:https://www.cnblogs.com/lanaiwanqi/p/6684490.html,比我自己写的简单。
思路:
1、给数组设置岗哨。
2、依照三角形的边的顺序逐次填充。
int arr[N][N]; int GetLastNum(int num) { return (num + 1) * num / 2; } void GenerateTriangle(int num) { int start = 1; int lastNum = GetLastNum(num); int x = 0, y = 1; /* arr初始化 */ for (int i = 0; i < N; i++) { memset(arr[i], 0, sizeof(int) * N); } /* 设置数组边岗哨 */ for (int i = 0; i < N; i++) { arr[i][0] = arr[0][i] = 1; } arr[1][num + 1] = 1; // 设置第一行的岗哨 while (start <= lastNum) { // 上边 while (arr[y][x + 1] == 0) { arr[y][++x] = start++; } // 斜边 while (arr[y+1][x-1] == 0) { arr[++y][--x] = start++; } // 左边 while (arr[y-1][x] == 0) { arr[--y][x] = start++; } } } void Show(int num) { for (int y = 1; y <= num; y++) { for (int x = 1; x <= num - y + 1; x++) { printf("%d ", arr[y][x]); } putchar('\n'); } } int _tmain(int argc, _TCHAR* argv[]) { int n; scanf("%d", &n); GenerateTriangle(n); Show(n); return 0; }