您的位置:首页 > 编程语言

FAFU-OJ 1408 摆花

2013-12-12 19:41 225 查看
题目连接:http://acm.fafu.edu.cn/problem.php?id=1408
方法一:开一个数组char s[1000][1000]保存图形,再打印。
#include <stdio.h>
char s[999][999];

int main()
{
int i,j,q,n;
scanf("%d",&n);

char c = 'A' + (n+1)/2%26;
int t = (n+1)/2;
for(q = 1; q <= t; q++)
{
if(c == 'A')	c = 'Z';
else	c--;
for(i = q; i <= n+1-q; i++)
{	s[q][i] =	s[n+1-q][i] = 	s[i][n+1-q] = s[i][q] = c;
}
}

for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
printf(" %c",s[i][j]);
printf("\n");
}

return 0;
}
这道题的另一种写法:(不用开数组,只要找到每个点的规律,用i,j表示出来,直接打印可以省去很多memory)
#include <stdio.h>
int n;
int t;
char print(int x,int y)
{
char c;
int min;
x = x>t?2*t-x:x;
y = y>t?2*t-y:y;
min = (x>y)?y:x;
c = 'A'+(t-min)%26;
return c;
}

int main()
{
scanf("%d",&n);
int i,j;
t = (n+1)/2;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
printf(" %c",print(i,j));
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C 编程语言