512 - Spreadsheet Tracking

来源:互联网 发布:淘宝网腊肠灌肠机 编辑:程序博客网 时间:2024/06/05 17:24

出了很多意想不到的问题和错误,再次让我意识到调试能力的重要性。

#include<stdio.h>

#include<string.h>
#include<stdlib.h>
#define BIF 10000
int a[75][75],s[75][75];
int r,c;
char ans[5];
int bbs[100];
int cmp(const void *a ,const void *b)
{
    return *(int *)a-*(int *)b;
}
void exchange(int r1,int c1,int r2,int c2)
{
    int t;
    t=a[r1][c1];
    s[r1][c1]=a[r1][c1]=a[r2][c2];//a和s数组要同时改
    s[r2][c2]=a[r2][c2]=t;
   




}
void delet(int t)
{
    int i,j,n;


    if(ans[1]=='R')
    {


        for(n=0;n<t;n++){


        for(i=1;i<=c;i++)
            s[bbs[n]][i]=a[bbs[n]][i]=-1;//要置换成-1,不然会和插入一行空格那里出现错误
        }
        int m=1;
        for(i=1;i<=r;i++)
        {
            if(s[i][1]==-1)
                continue;
            for(j=1;j<=c;j++)


                    a[m][j]=s[i][j];
                m++;
        }
        r=r-t;
        for(i=1;i<=r;i++){
            for(j=1;j<=c;j++){
            s[i][j]=a[i][j];




            }




        }


    }


    if(ans[1]=='C')
    {
        for(n=0;n<t;n++){
        for(i=1;i<=r;i++)
            s[i][bbs[n]]=a[i][bbs[n]]=-1;
        }
            int m=1;
        for(i=1;i<=c;i++)
        {
            if(s[1][i]==-1)
                continue;
            for(j=1;j<=r;j++)
                a[j][m]=s[j][i];
                m++;
        }
        c=c-t;
        for(i=1;i<=r;i++){
            for(j=1;j<=c;j++){
            s[i][j]=a[i][j];


            }


        }
    }


}
void insert(int t)
{
    int i,j,n,zzp=0,m=0;




    if(ans[1]=='R')
    {
        for(n=0;n<t;n++){


          for(i=1;i<=c;i++)
                a[bbs[n]+m][i]=0;
            for(i=bbs[n]+m;i<=r;i++)
                for(j=1;j<=c;j++)
                a[i+1][j]=s[i][j];
                m+=1; r++;
            for(i=1;i<=r;i++){
                for(j=1;j<=c;j++){
                    s[i][j]=a[i][j];


    }


            }
    }


    }
    if(ans[1]=='C')
    {
        for(n=0;n<t;n++){


          for(i=1;i<=r;i++)
                a[i][bbs[n]+m]=0;
            for(j=bbs[n]+m;j<=c;j++)
                 for(i=1;i<=r;i++)


                a[i][j+1]=s[i][j];
                m+=1;c++;
            for(i=1;i<=r;i++){
                for(j=1;j<=c;j++){
                    s[i][j]=a[i][j];


    }


            }
        }


    }




}
int main()
{
    int i,j,n,t,x,q,r1,r2,c1,c2,kase=0;
    while(scanf("%d%d",&r,&c)!=EOF)
    {
        if(r==0&&c==0)
            return 0;
        for(i=1;i<=r;i++)
            for(j=1;j<=c;j++)
            a[i][j]=s[i][j]=i*BIF+j;


        scanf("%d",&n);
        for(i=0;i<n;i++)
        {


            scanf("%s",ans);
            if(ans[0]=='E')
            {
                scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
                exchange(r1,c1,r2,c2);


            }
            else
            {
                memset(bbs,0,sizeof(bbs));
                scanf("%d",&t);
                for(j=0;j<t;j++)
                {
                    scanf("%d",&bbs[j]);


                }


                qsort(bbs,t,sizeof(int),cmp);
                if(ans[0]=='D')
                    delet(t);
                else
                    insert(t);
            }
        }
        memset(s,0,sizeof(s));
        if(kase)
            printf("\n");
        scanf("%d",&q);
        int r0,c0;
        int d,e;
        printf("Spreadsheet #%d\n",++kase);
        int k;
        for(k=0;k<q;k++)
        {
            scanf("%d%d",&r0,&c0);
            int l=0;
            for(i=1;i<=r;i++){
                for(j=1;j<=c;j++)
            if(r0==a[i][j]/BIF&&c0==a[i][j]%BIF){
                d=i;e=j;l=1;break;
            }
            if(l==1)
                break;
        }
            if(l==0)
                printf("Cell data in (%d,%d) GONE\n",r0,c0);
            else
                printf("Cell data in (%d,%d) moved to (%d,%d)\n",r0,c0,d,e);
        }
    }
      return 0;
}
0 0
原创粉丝点击