232 Crossword Answers

来源:互联网 发布:搜狐2016出品的网络剧 编辑:程序博客网 时间:2024/06/05 19:58
我用了一天多的时间来做这个题,从连题都看不懂,到思路混乱,到写出来差不多能运行但是有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;       }    }}}

0 0
原创粉丝点击