2 abcdefghijklmnopqrstuvwxyz dcba hgfe qwertyuiopasdfghjklzxcvbnm abc def
eeee wtl
应该是比较水的一道题了
细心点就好
1.两个数相减为0的情况
2.例如1000-1
#include <stdio.h> #include <string.h> char word[30]; int tonum(char ch) { for(int i=0;i<26;i++) if(word[i]==ch) return i; } int main() { int ncase; char a[10005]; char b[10005]; char temp[10005]; char result[10005]; scanf("%d",&ncase); while(ncase--) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(temp,0,sizeof(temp)); memset(result,0,sizeof(result)); scanf(" %s %s %s",word,a,b); //使较大的数为a 较小的数为b int len1=strlen(a); int len2=strlen(b); if(len1<len2) { strcpy(temp,a); strcpy(a,b); strcpy(b,temp); } else if(len1==len2) { for(int i=0;i<len1;i++) { if(tonum(a[i])<tonum(b[i])) { strcpy(temp,a); strcpy(a,b); strcpy(b,temp); break; } if(tonum(a[i])>tonum(b[i])) break; } } //计算a-b int x; if(len1<len2) x=len1,len1=len2,len2=x; for(int i=len1-1,j=len2-1;i>=0;i--,j--) { int x1,x2; x1=tonum(a[i]); if(j>=0) x2=tonum(b[j]); else x2=0; if(x1>=x2) result[i]=word[x1-x2]; else { result[i]=word[26+x1-x2]; int k=i; while(tonum(a[k-1])==0) k--; for(int j=k;j<i;j++) a[j]=word[25]; a[k-1]=word[tonum(a[k-1])-1]; } } int left=-1; for(int i=0;i<len1;i++) if(tonum(result[i])!=0) { left=i; break; } //a==b的情况 if(left==-1) printf("%c",word[0]); else for(int i=left;i<len1;i++) printf("%c",result[i]); printf("\n"); } return 0; }