1.csu1214: 三个数字
第一:统计数字,然后输出
#include<stdio.h>
char a[100000+3];
int main()
{
while(~scanf("%s",a))
{
int num1,num2,num3;
num1=num2=num3=0;
for(int i=0;a[i]!='\0';i++)
if(a[i]=='1')
num1++;
else if(a[i]=='2')
num2++;
else
num3++;
int sum=num1+num2+num3;
for(int i=0;i<sum;i++)
if(i<num2)
printf("2");
else if(i<sum-num3)
printf("1");
else
printf("3");
printf("\n");
}
return 0;
}
/**********************************************************************
Problem: 1214
User: shenyu
Language: C++
Result: AC
Time:12 ms
Memory:1216 kb
**********************************************************************/
第二种:遍历,2插到前,3放到后
#include<stdio.h>
#include<string.h>
char a[100000+3];
int main()
{
while(~scanf("%s",a))
{
int i=0,j=strlen(a)-1,k=0;
while(k<=j)
{
if(a[k]=='2')
{
char t=a[i];
a[i++]=a[k];
a[k]=t;
}
if(a[k]=='3')
{
char t=a[j];
a[j--]=a[k];
a[k]=t;
if(a[k]!='1')//交换后可能是2,3故要保持不变,所以-1
k--;
}
k++;
}
printf("%s\n",a);
}
return 0;
}
/**********************************************************************
Problem: 1214
User: shenyu
Language: C++
Result: AC
Time:4 ms
Memory:1216 kb
**********************************************************************/