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;
}
浙公网安备 33010602011771号