螺旋三角形 (一)
思路:
1、依次画三角形的上边、斜边和左边,从最外层开始画起。
2、每层的每条边长度相等,例如:num为5时,第一层边(最外层)的长度为num - 1;
3、当最后一层只有一个点时(此时,边长为0),需要特殊处理。
int GetLevels(int num) { int cnt = 0; for (int i = num; i > 0; i -= 3) { cnt ++; } return cnt; } int GetSideLen(int level, int num) { return num - (level - 1) * 3 - 1; } int arr[11][11]; void OutputTriangle(int num) { int levels = GetLevels(num); int level = 1; int x, y; int start = 1; int tt = 0; for (;level <= levels; tt++) { int sideLen = GetSideLen(level, num); if (sideLen == 0) { arr[level][level] = start++; } for (x = level; x < level + sideLen; x++) { if (arr[level][x] == 0) { arr[level][x] = start++; } } for (x, y = level; y < level + sideLen; y++, x--) { if (arr[y][x] == 0) { arr[y][x] = start++; } } for (y; y > level; y --) { if (arr[y][level] == 0) { arr[y][level] = start++; } } level ++; } } 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 main() { for (int i = 0; i < 11; i++) { memset(arr[i], 0, sizeof(int) * 11); } int n; scanf("%d", &n); OutputTriangle(n); Show(n); return 0; }