思路:
多画画就发现从五的时候可以这么填:
六的时候这么填:
七的时候这么填:
看出规律了吗?
没看出的话再画画把。
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define MP make_pair 6 #define PB push_back 7 typedef long long LL; 8 typedef pair<int,int> PII; 9 const double eps=1e-8; 10 const double pi=acos(-1.0); 11 const int K=1e6+7; 12 const int mod=1e9+7; 13 14 15 int main(void) 16 { 17 int n,h,w; 18 //freopen("out.acm","w",stdout); 19 while(~scanf("%d",&n)) 20 { 21 if(n==1) printf("1 1 1 1 "); 22 else if(n==2) printf("1 3 1 1 1 2 1 3 "); 23 else if(n==3) printf("2 3 1 2 1 3 2 3 1 1 2 1 2 2 "); 24 else if(n==4) 25 printf("2 5 1 2 1 3 2 3 1 1 2 1 2 2 2 4 1 4 1 5 2 5 "); 26 else if(n==5) 27 printf("3 5 1 2 3 4 3 5 1 1 2 1 2 2 2 4 1 4 1 5 2 5 3 1 3 2 3 3 2 3 1 3 "); 28 else 29 { 30 h=(n+1)/2,w=(n/2-1)*2+3; 31 printf("%d %d ",h,w); 32 printf("1 2 3 4 3 5 1 1 2 1 2 2 2 4 1 4 1 5 2 5 3 1 3 2 3 3 2 3 1 3 "); 33 for(int i=6;i<=n;i++) 34 if(i&1) 35 { 36 int x=(i+1)/2,j=1; 37 while(j<i) 38 printf("%d %d ",x,j++); 39 printf("%d %d ",x-1,j-1); 40 } 41 else 42 { 43 int x=i/2-1+(i==n),mx=i/2+(i!=n); 44 while(x) 45 printf("%d %d ",x--,i); 46 x=1; 47 while(x<mx) 48 printf("%d %d ",x++,i+1); 49 printf("%d %d ",x,i+1); 50 } 51 } 52 } 53 return 0; 54 }