196UVa电子表格

来源:互联网 发布:免费音乐广告制作软件 编辑:程序博客网 时间:2024/05/01 10:43

参考了别人的“没有必要进行拓扑排序

#include<stdio.h>#include<ctype.h>#include<stdlib.h>#include<string.h>char* sheet[1000][18300];char str[100];char ALPHA[27]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";char NUM[10]="123456789";int r,c;bool parse(char*& s,int& i,int& j);void dfs(int i,int j){if(isdigit(sheet[i][j][0]))return;int ii,jj;char *s = sheet[i][j];int sum = 0;bool contin;do{contin = parse(s,ii,jj);dfs(ii,jj);int n = 0;for(int k = 0; k < strlen(sheet[ii][jj]);k++){n = n*10+sheet[ii][jj][k]-'0';}sum +=n;}while(contin);sprintf(sheet[i][j],"%d",sum);}bool parse(char*& s,int& i,int& j){bool nflag = true;char* pal=strpbrk(s,ALPHA);char* pnum=strpbrk(s,NUM);char* pend=strchr(s,'+');if(pend ==0){nflag = false; //no morepend = s+strlen(s);}if(pnum-pal==1){j=*pal-'A'+1;}else if(pnum-pal==2){j=26*(*(pal)-'A'+1)+*(pal+1)-'A'+1;}else if(pnum-pal==3){j=26*26*(*pal-'A'+1)+26*(*(pal+1)-'A'+1)+*(pal+2)-'A'+1;}i=0;while(pnum < pend){i = i*10+*pnum-'0';pnum++;}s = pend+1;return nflag;}int main(){//freopen("input.txt","r",stdin);int T;scanf("%d",&T);while(T--){scanf("%d%d",&c,&r);for(int i = 1; i <= r;i++){for(int j = 1; j <= c;j++){scanf("%s",str);sheet[i][j] = (char*)malloc(sizeof(str)+1);strcpy(sheet[i][j],str);}}for(int i = 1; i <= r;i++){for(int j = 1; j <= c;j++){    if(!isdigit(sheet[i][j][0])){dfs(i,j);}printf("%s",sheet[i][j]);if(j!= c ) putchar(' ');}putchar('\n');}for(int i = 1; i <= r;i++){for(int j = 1; j <= c;j++){    delete[] sheet[i][j];}}}}


0 0
原创粉丝点击