【汇顶科技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%
#汇顶科技##笔试题目#
全部评论

相关推荐

2 9 评论
分享
牛客网
牛客企业服务