这种题目很灵活好嘛……多动脑观察亲,先观察下每次输入数字n之后,需要开辟多大的二维数组,再看每一行到下一行之间有什么变化,xyz012……这是ASCLL码递增,以后还是勤思考……
#include <stdio.h>
int main()
{
char mch[] = "xyz0123";
int n = 5;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i < j) printf("%c", mch[i]); else printf("%c", mch[j]);
}
for (int j = n - 1; j >= 0; j--)
{
if (i < j) printf("%c", mch[i]); else printf("%c", mch[j]);
}
printf("\n");
}
for (int i = n - 1; i >= 0; i--)
{
for (int j = 0; j < n; j++)
{
if (i < j) printf("%c", mch[i]); else printf("%c", mch[j]);
}
for (int j = n - 1; j >= 0; j--)
{
if (i < j) printf("%c", mch[i]); else printf("%c", mch[j]);
}
printf("\n");
}
}
http://codepad.org/NM1xPBse
xxxxxxxxxx
xyyyyyyyyx
xyzzzzzzyx
xyz0000zyx
xyz0110zyx
xyz0110zyx
xyz0000zyx
xyzzzzzzyx
xyyyyyyyyx
xxxxxxxxxx
#include
#include
char a[100][100];
char list[]={'x','y','z','0','1','2','3','4','5','6','7','8','9'};
int main()
{
void print_arry(int n);
int n;
printf("Please input n:\n");
scanf("%d",&n);
print_arry(n);
int p,q;
for(p=0;p<=2*(n-1);p++)
{
for(q=0;q<=2*(n-1);q++)
printf("%3c",a[p][q]);
printf("\n");
}
system("pause");
return 0;
}
void print_arry(int n)
{
int i;
static int k=0;
static int start,end=2*(n-1);
if(n==1)
{
a[start][end]=list[k];
}
else
{
for(i=start;i<=end;i++)
{
a[start][i]=list[k];
a[i][start]=list[k];
a[end][i]=list[k];
a[i][end]=list[k];
}
/*int p,q;
for(p=start;p<=end;p++)
{
for(q=start;q<=end;q++)
printf("%3c",a[p][q]);
printf("\n");
}
printf("\n");*/
k++;
start=k;
end-=1;
print_arry(n-1);
}
}