acm上的一个小题目

来源:互联网 发布:java cs开发实例 编辑:程序博客网 时间:2024/05/16 11:13

最近知道了北大的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的编辑器。不知道哪里出了问题

原创粉丝点击