【汇顶科技190826线上笔试(字符重组+最大公约)】
【汇顶科技2020届线上笔试-0826】
1:字符串重新排列,要求大写字母先排列,大写字母排列结束后小写字母排列,然后是数字,最后是其他字符。
要求排列后的大写字母、小写字母、数字等均保持在原来字符转中出现的顺序不变。
例如:
输入:ASDAs89=-3dD
输出:ASDADsd893=-
2:求输入的两个数的最大公约数
例如:
输入:12 6
输出:6
解答:
1:鄙人献上一段自己写的很不好的代码(40%),见笑了,真心大佬来赐教!
#include<stdio.h> #include<stdlib.h> #include<string.h> void str(char *s) { int i,j=0,k=0,m=0,n,d=0,p=0,len; char news1[100]; char news2[100]; char news3[100]; char news4[100]; len=strlen(s); for(i=0;i<len;i++) { if(s[i]>='A'&& s[i]<='Z') { news1[j++]=s[i]; } else if(s[i]>='a'&& s[i]<='z') { news2[k++]=s[i]; } else if(s[i]>='0'&& s[i]<='9') news3[m++]=s[i]; else news4[b++]=s[i]; } for(i=j,n=0;i<j+k,n<k;i++,n++) { news1[i]=news2[n]; } for(i=j+k,p=0;i<j+k+m,p<m;i++,p++) { news1[i]=news3[p]; } for(i=j+k+m,d=0;i<j+k+m+b,d<b;i++,d++) { news1[i]=news4[d]; } s=news1; } int main(void) { char s[100]; scanf("%s", s); str(s); printf("%s\n", s); return 0; }
2:不知道为什么只能通过80%