数字中间化 二 (串)
时间: 1ms 内存:128M
描述:
输入一个字符串,对其进行操作,使其数字在中间,且字母呈升序,数字呈降序
输入:
一个字符串
输出:
改变后的字符串
示例输入:
asdff123er234
示例输出:
ade433221ffrs
提示:
参考答案(内存最优[752]):
#include<stdio.h>
#include<string.h>
void fb(char b[])
{
int i,j,n,k;
char temp;
n=strlen(b);
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(b[k]<b[j])
k=j;
temp=b[k];
b[k]=b[i];
b[i]=temp;
}
}
void fc(char c[])
{
int i,j,n,k;
char temp;
n=strlen(c);
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(c[k]>c[j])
k=j;
temp=c[k];
c[k]=c[i];
c[i]=temp;
}
}
int main()
{
char a[100],b[100],c[100];
int i,j,k=0,n,m=0;
gets(a);
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]>='0'&&a[i]<='9')
{
b[k]=a[i];
k++;
}
else
{
c[m]=a[i];
m++;
}
}
b[k]='\0';
c[m]='\0';
fb(b);
fc(c);
for(i=0;i<m/2;i++)
printf("%c",c[i]);
j=i;
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
for(i=j;i<m;i++)
printf("%c",c[i]);
printf("\n");
return 0;
}
参考答案(时间最优[0]):
#include<stdio.h>
#include<string.h>
void fb(char b[])
{
int i,j,n,k;
char temp;
n=strlen(b);
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(b[k]<b[j])
k=j;
temp=b[k];
b[k]=b[i];
b[i]=temp;
}
}
void fc(char c[])
{
int i,j,n,k;
char temp;
n=strlen(c);
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(c[k]>c[j])
k=j;
temp=c[k];
c[k]=c[i];
c[i]=temp;
}
}
int main()
{
char a[100],b[100],c[100];
int i,j,k=0,n,m=0;
gets(a);
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]>='0'&&a[i]<='9')
{
b[k]=a[i];
k++;
}
else
{
c[m]=a[i];
m++;
}
}
b[k]='\0';
c[m]='\0';
fb(b);
fc(c);
for(i=0;i<m/2;i++)
printf("%c",c[i]);
j=i;
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
for(i=j;i<m;i++)
printf("%c",c[i]);
printf("\n");
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
