您的位置:首页 > 其它

简单递归之蛇形填数

2014-11-29 09:24 169 查看
时间限制:1000 ms | 内存限制:65535 KB

【问题描述】

peter喜欢玩字母游戏,于是他编写了一个有趣的游戏。游戏规则是在一个 (N-1) * N的表格里填写字母,规则:对于每个输入的N,由 (N-1) * N的字母区域的左上角开始,从字母A开始逆时针填充一个字母区域,乘积若超过26继续由新一组的A、B、C„„填充,不要求输出边框。

【输入】

多组测试数据(数据量在100组以内)。每组测试数据只有一行为一个整数N(1<=N<=30),表示表格的宽度。

【输出】

对于每组输入数据,输出N-1行,为填完的表格(N-1行,每行N个整数,每个数字之间用空格隔开)。

【样例输入】

5

【样例输出】

代表一个4*5的顺时针旋转的字母区域,其样式如下:

A B C D E

N O P Q F

M T S R G

L K J I H

代码如下:

#include<stdio.h>

char p[40][40];

void fill(char ch,int begin,int size)

{

if(size==0)

return ;

if(size==1)

{

p[begin][begin]=ch;

return ;}

int i=0;

int h=begin,v=begin;

p[h][v]=ch;

ch++;

for(i=0;i<size-2;i++)

{

if(ch=='Z')

{

h++;

p[h][v]=ch;

ch='A';

}

else

{

h++;

p[h][v]=ch;

ch++;

}

}

for(i=0;i<size-1;i++)

{

if(ch=='Z')

{

v++;

p[h][v]=ch;

ch='A';

}

else

{

v++;

p[h][v]=ch;

ch++;

}

}

for(i=0;i<size-2;i++)

{

if(ch=='Z')

{

h--;

p[h][v]=ch;

ch='A';

}

else

{

h--;

p[h][v]=ch;

ch++;

}

}

for(i=0;i<size-2;i++)

{

if(ch=='Z')

{

v--;

p[h][v]=ch;

ch='A';

}

else

{

v--;

p[h][v]=ch;

ch++;

}

}

fill(ch,v,size-2);

}

int main(void)

{

int n,h,v;

while(scanf("%d",&n)!=EOF)

{

fill('A',0,n);

for(h=0;h<n-1;h++)

{

for(v=0;v<n;v++)

printf("%c ",p[h][v]);

printf("\n");

}

}

return 0;

}



此问题是一个典型的适合用递归进行解答的问题,因为通过观察可以发现,在字母矩阵的每一层(每一圈为一层)中,运算方式是一样的,因此可通过一个递归函数实现此种运算的重复运算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: