acm上的一个小题目

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值