HDU 4706
传送门
题意打印一个’N’,由a-z字母组成。要求输出3-10的’N’。可以手动打表,在线模拟,或找规律构造,这里讲在线模拟。
分成三部,竖斜竖,直接模拟即可,注意字符大于z时减等26,以及注意输出时无空格,免得PE。
代码如下,写的丑,将就看。
#include<stdio.h>
char s[55][15],c='a';
int n,tot,ss=3;
char down_1(int n,char c)
{
int num=(n*n-n-6)>>1;
for(int i=num;i<num+n;i++)
{
if(c>'z')c-=26;
s[i][0]=c;
c++;
}
return c;
}
char diagonal(int n,char c)
{
int num=((n*n-n-6)>>1)+n-2,tot=1;
for(int i=num;i>num-n+1;i--)
{
if(c>'z')c-=26;
s[i][tot++]=c;
c++;
}
return c-1;
}
char down_2(int n,char c)
{
int num=(n*n-n-6)>>1;
for(int i=num;i<num+n;i++)
{
if(c>'z')c-=26;
s[i][n-1]=c;
c++;
}
return c;
}
int main()
{
for(int i=0;i<52;i++)
for(int j=0;j<10;j++)
s[i][j]=' ';
for(int i=0;tot<52;i++)
{
for(int j=0;j<ss;j++)
s[tot++][ss]=0;
ss++;
}
for(n=3;n<=10;n++)
{
c=down_1(n,c);
c=diagonal(n,c);
c=down_2(n,c);
}
for(int i=0;i<52;i++)
puts(s[i]);
return 0;
}