最近知道了北大的acm,原来就是解题的,看了一个编号为3752的题,写了个程序,搞了半天,结果也跟要求向附,但是怎么都通不过acm的评测。搞的一点兴致都没有了。把题目列举如下: 输入:n m 输出:一个n*m的矩阵,矩阵的内容如下
A B C D E
P Q R S F
O X Y T G
N W V U H
M L K J I
也就是一个旋转的矩阵,绕着圈往中心走。 代码如下:
#include "stdio.h"
#include "stdlib .h"
unsigned char *matrix;
unsigned int rownum=0,arraynum=0;
int main(){
int i,j;
unsigned char ca_get();
unsigned int func(unsigned int,unsigned int,unsigned int,unsigned int);
printf("please input Row number:/n");
scanf("%d",&rownum);
printf("please input Array number:/n");
scanf("%d",&arraynum);
matrix=(unsigned char*)malloc((rownum*arraynum));
func(0,0,rownum,arraynum);
for(i=0;iZ每次调用均得到一个字符,此函数不是很好,但是能用
static unsigned int count =0;
unsigned char charac;
charac='A'+(count%26);
count++;
return (charac);
}
unsigned int func(unsigned int x,unsigned int y,unsigned int row,unsigned int array){//x,y表示矩阵的起始位置,row,array表示矩阵的长和宽
int i;
if((array==0) || (row==0)){//矩阵完全缩小为0
return 0;
}
else if(row==1){//矩阵的行数减少到了1行
for(i=y;i< (y+array);i++)
matrix[x*arraynum+i]=ca_get();//mmatrix[x][i]=ca_get();
return 0;
}
else if(array==1){//矩阵的列数减少到了1列
for(i=x;i<(x+row);i++)
matrix[i*arraynum+y]=ca_get();//matrix[i][y]=ca_get();
return 0;
}
else{//矩阵的行数和列数均>=2
for(i=y;i< (y+array-1);i++)
matrix[x*arraynum+i]=ca_get();//matrix[x][i]=ca_get();
for(i=x;i<(x+row-1);i++)
matrix[i*arraynum+y+array-1]=ca_get();//matrix[i][y+array-1]=ca_get();
for(i=(y+array-1);i>y;i--)
matrix[(x+row-1)*arraynum+i]=ca_get();//matrix[x+row-1][i]=ca_get();
for(i=(x+row-1);i>x;i--)
matrix[i*arraynum+y]=ca_get();//matrix[i][y]=ca_get();
func(x+1,y+1,row-2,array-2); //列数和行数均减去2,开始位置坐标x,y均加1然后迭代
}
}
运行结果还行,但是确实过不了acm的编辑器。不知道哪里出了问题