您的位置:首页 > 编程语言 > C语言/C++

232 Crossword Answers

2017-01-22 12:48 155 查看
我用了一天多的时间来做这个题,从连题都看不懂,到思路混乱,到写出来差不多能运行但是有bug的代码,再到将自己写的一百行代码缩减到五十行,再到算法的逐渐精炼,我不管我能写多少代码,但是我希望我写的代码都是精品,又想起那句话,重剑无锋,大巧无工,代码也是如此。
这个题我栽在格式上了,题目要求,在可执行输入后,每个输出之间需要有一个空行,我在第一个输出后直接加了个空行再开始的第二次的输入,这样是错误的,虽然我现在依然感觉并不错。。。但是oj题既然严格就按严格的来写算了
以下是我的代码
#include<stdio.h>
#include<string.h>
main()
{
int i,n,m,x,y,sum,biaoji[20][20],count=1,diao;
char qian[20][20]={0};
while(scanf("%d",&n)&&n!=0)
{
diao=0;
sum=1;
memset(biaoji,0,sizeof(biaoji));
scanf("%d",&m);
getchar();
gets(qian[0]);if(qian[0][0]=='0')break;
for(i=1;i<n;i++)
gets(qian[i]);
if(count>1)printf("\n");
for(x=0;x<n;x++)
for(y=0;y<m;y++)
{if(qian[x][y]=='*')
{biaoji[x][y]=-1;continue;}
if(y==0||x==0){biaoji[x][y]=sum;sum++;}
if(x!=0&&y!=0&&(qian[x][y-1]=='*'||qian[x-1][y]=='*'))
{biaoji[x][y]=sum;sum++;}
}
printf("puzzle #%d:\n",count++);
printf("Across\n");
for(x=0;x<n;x++)
for(y=0;y<m;y++)
{
if(biaoji[x][y]==-1)continue;
if(biaoji[x][y]>=0&&y==0||biaoji[x][y]>=0&&biaoji[x][y-1]==-1)printf("%3d.",biaoji[x][y]);
if(biaoji[x][y]>=0&&biaoji[x][y+1]==-1||(biaoji[x][y]>=0&&y==m-1)){printf("%c\n",qian[x][y]);continue;}
printf("%c",qian[x][y]);
}
printf("Down\n");
for(x=0;x<n;x++)
for(y=0;y<m;y++)
{i=x;
if(biaoji[x][y]==-1||biaoji[x][y]==-2)continue;
if(biaoji[x][y]>=0)
for(;i<n;i++){
if(biaoji[i][y]==-1)break;
if(biaoji[i][y]>=0&&i==0||biaoji[i-1][y]==-1&&biaoji[i][y]>=0)printf("%3d.",biaoji[i][y]);
if(biaoji[i][y]>=0&&biaoji[i+1][y]==-1||(biaoji[i][y]>=0&&i==n-1)){printf("%c\n",qian[i][y]);biaoji[i][y]=-2;continue;}
printf("%c",qian[i][y]);biaoji[i][y]=-2;
}
}
}
}





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息