pku 1806 Manhattan 2025(找规律)

#include <stdio.h>
#include <string.h>

char  ss[1000][1000];
void pp1(int a , int b , int c)   //a 行数    b最大数   c最小数
{
     int i , j , k , p , q;    
      for(j = 1;j <= a;j++)
         for(k = 1;k <= a;k++)
               ss[j][k] = '.';
         for(i = 0;i <= b - c;i++)
         {
           for(r = 0;r <= i;r++)
           { ss[(a + 1) / 2 + r][(a + 1) / 2 - i + r]=char(c + i) + '0';//这四行代码搞死我了,起先一直在脑子勾画,可
             ss[(a + 1) / 2 - i + r][(a + 1) / 2 - r]=char(c + i) + '0'; //就是wa,在wa了大概5次以后,没办法,只好在
             ss[(a + 1) / 2 - i + r][(a + 1) / 2 + r]=char(c + i) + '0';//纸上画,结果一画就出来了,看来还是形象话的
             ss[(a + 1) / 2 + r][(a + 1) / 2 + i - r]=char(c + i) + '0';//东西更容易思考啊^_^
           }
          // printf("***\n");
         }
//         //printf("*********************\n");
////         for(p=1;p<=(a-1)/2;p++)
////                     { for(q=1;q<=(a-1)/2;q++)
////                         printf("%c",ss[p][q]);
////                    
////                         printf("\n"); 
////                     } 
////                     printf("\n");
//}
void pp2( int a )
{
     int i , j , k;
         for(j = 1;j <= a;j++)
            for(k = 1;k <= a;k++)
               ss[j][k]='.';
}

int main()
{
    int n,m,i,s,j,p,q;
    while(scanf("%d",&n)==1)
    {
        for(i = 0;i < n;i++)
           {
             scanf("%d",&m);
             printf("Scenario #%d:\n",i+1);
             if(m <= 9)
            { for (j = 1;j <= m * 2 + 1;j++)
                {
                  if(j > m + 1) s = j - m - 1;
                  else s = m - j + 1;
                    pp1(2 * m + 1, m , s);
                    printf("slice #%d:\n",j);
                   for(p = 1; p <= 2 * m + 1;p++)
                     { for(q = 1;q <= 2 * m + 1;q++)
                         printf("%c",ss[p][q]);            
                         printf("\n"); 
                     } 
                 }
                 printf("\n"); 
           }
          
           else
           {pp2( m * 2 + 1 );
           printf("slice #1:\n");
                   for(p = 1;p <= 2 * m + 1;p++)
                     { for(q = 1;q <= 2 * m + 1;q++)
                         printf("%c",ss[p][q]);            
                         printf("\n"); 
                     } 
                 }
                 printf("\n"); 
           }
          
    }
    return 0;
}

posted on 2007-10-15 20:52  xmx  阅读(509)  评论(0)    收藏  举报

导航