C ++, 926 byte
#include<iostream>
#include<string>
#include<math.h>
#define S string
using namespace std;S N(S x,int y){S z="";for(int q=0;q<y;q++){z+=x;}return z;}int main(){int n=0,t=0,g=0,fi=1;cin>>n;int t1[]={0,0,n,0};int t2[]={0,n-2,n-2,1};for(int k=0;k<n+1;k++){if((k>(n-2)/2)&&(k<(n+5)/2)){if(g==0){S d,e;if(!((n+1)%4)){cout<<N("* ",t2[0])<<" *"<<N(" *",t2[0])<<endl<<N("* ",(n+1)/2)<<endl<<N("* ",t2[0])<<"***"<<N(" *",t2[0])<<endl;t2[2]=n-8-(n-11);t1[2]=n-4-(n-11);t1[0]--;t2[3]--;t1[3]-=2;}else{cout<<N("* ",t1[0])<<"***"<<N(" *",t2[0])<<endl<<N("* ",(n+1)/2)<<endl<<N("* ",t1[0])<<"* "<<N(" *",t2[0])<<endl;t2[0]--;t1[2]+=2;t2[2]+=6;t1[3]--;t2[1]-=2;t2[3]-=2;}fi=0;}g=5;}else{t=1-t;int*tR;tR=t?t1:t2;cout<<N("* ",tR[0])<<N(t?"*":" ",tR[2])<<N(" *",tR[3])<<endl;if(fi){if(t){t1[0]+=k==0?0:1;t1[2]-=k==0?2:4;t1[3]++;}else{t2[0]++;t2[2]-=4;t2[3]++;}}else{if(t){t1[0]--;t1[2]+=4;t1[3]--;}else{t2[0]--;t2[2]+=4;t2[3]--;}}}}return 0;}
Điều này không thanh lịch, nhưng nó không chiếm nhiều bộ nhớ cho n lớn. Hơn nữa, có (gần như chắc chắn) khoảng 20 nhân vật có thể được đánh gôn thêm, nhưng tôi không thể đứng nhìn nó nữa.
Giải thích ngắn gọn:
Thao tác này sẽ chia các dòng trong hình xoắn ốc thành hai loại: loại có ****** ở giữa và loại có \ s \ s \ s \ s \ s ở giữa. Sau đó, rõ ràng là mỗi dòng bao gồm một số "*", giữa và một số "*". Chỉ ra chính xác có bao nhiêu điều là đơn giản nếu bạn nhìn vào mẫu đủ lâu. Điều khó khăn là in trung tâm của hình xoắn ốc mà về cơ bản tôi đã mã hóa cứng bằng cách sử dụng một điều kiện. Điều này cuối cùng có ích vì chuyển đổi dòng *** và \ s \ s \ s là số lẻ / thậm chí ở đó.
Các xét nghiệm:
Đầu vào: 55
(Tôi nghĩ rằng những cái lớn trông ngầu nhất)
Đầu ra:
****** / TÌM KIẾM *****
*
****** / TÌM KIẾM *** *
* * *
* ****** / TÌM KIẾM * *
* * * * *
* * ****** / TÌM HIỂU * * * * * * * * * * * * * *
* * * * * * *
* * * ****** / TÌM HIỂU * * * * * * * * * * * * * * * *
* * * * * * * * * *
* * * * ****** / TÌM HIỂU * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * ****** / TÌM HIỂU * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * ****** / TÌM HIỂU * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * ****** / TÌM HIỂU * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * ****** / 4/8/8/8 * * * * * * * * * * *
Th * *
* * * * * * * * * ****** / 4/4 * * * * * * * * * * * *
Th * * * * * * * * * * * cái *
* * * * * * * * * * ****** / 4/4 * * * * * * * * * * * * *
B * *
* * * * * * * * * * * ****** * * * * * * * * * * * * * * * *
Sẽ có * * * * *
| * * * * * * * * * * * * ***** * * * * * * * * * * * * * * * *
| * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * {- chương trình của tôi thêm một khoảng trắng ở đây btw
| * * * * * * * * * * * * * *** * * * * * * * * * * * * * * * *
| * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * ****** * * * * * * * * * * * * * * *
Sẽ có * * * *
* * * * * * * * * * * ****** / 4 * * * * * * * * * * * * *
Th * *
* * * * * * * * * * ****** / 4/4 * * * * * * * * * * * * *
Thỉnh thoảng
* * * * * * * * * ****** / TÌM HIỂU * * * * * * * * * *
Th * *
* * * * * * * * ****** / TÌM HIỂU * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * ****** / TÌM HIỂU * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * ****** / TÌM HIỂU * * * * * * *
* * * * * * * * * * * * *
* * * * * ****** / TÌM HIỂU * * * * * * * * * * * * * *
* * * * * * * * * * *
* * * * ****** / TÌM HIỂU * * * * * * * * * * * * * * * * * *
* * * * * * * * *
* * * ****** / TÌM HIỂU * * * * * * * * * * * * * * * * * * *
* * * * * *
* * ****** / TÌM HIỂU * *
* * * *
* ****** / TÌM KIẾM ** *
* *
****** / TÌM KIẾM *****
Đầu vào: 3
Đầu ra:
***
*
* *
***
Lưu ý: Tôi không phải là nhà khoa học máy tính / sinh viên CS và tôi không biết làm thế nào để chứng minh rằng điều này sử dụng bộ nhớ O (log n). Tôi chỉ có thể tìm ra những việc cần làm dựa trên các liên kết trong câu hỏi. Tôi sẽ biết ơn nếu ai đó có thể xác nhận / từ chối nếu câu trả lời này là hợp lệ. Logic của tôi cho tính hợp lệ của câu trả lời này là nó không bao giờ lưu trữ bất kỳ biến kích thước nào dựa trên n ngoại trừ chính đầu vào. Thay vào đó, một vòng lặp for chạy n lần tính các giá trị nguyên dựa trên n. Có cùng số lượng các giá trị đó bất kể đầu vào.
Lưu ý2: Điều này không hoạt động với n = 1 vì phương pháp xử lý giữa của tôi. Điều này sẽ dễ dàng sửa chữa với các điều kiện, vì vậy nếu có ai trong một vài ký tự trong câu trả lời của tôi, tôi sẽ sửa nó;)
Chơi với nó trên ideone.
n
trong bộ nhớ O (1).