第十一周课堂作业(二)
原创
©著作权归作者所有:来自51CTO博客作者Y4tacker的原创作品,请联系作者获取转载授权,否则将追究法律责任
太懒了 毕竟这道题解法太明显 直接上代码吧
方法一:
#include <stdio.h>
#include <string.h>
int main()
{
int s[10];
int n;
int count=0;
int i=0;
int rr,nx,lb;
int temp;
printf("请输入;0代表红色,1代表白色,2代表蓝色\n");
do{
scanf("%d",&s[i++]);
count++;
}while(getchar() != '\n');
rr=-1;
nx=0;
lb=count;
while(nx!=lb)
{
if(s[nx]==0)
{
rr++;
temp=s[nx];
s[nx]=s[rr];
s[rr]=temp;
nx++;
}else if(s[nx]==1)
{
nx++;
}else if(s[nx]==2)
{
lb--;
temp=s[nx];
s[nx]=s[lb];
s[lb]=temp;
}
}
for(i=0;i<count;i++) \\这里实现输出rbw
{
switch(s[i])
{
case 0:putchar('r');break;
case 1:putchar('w');break;
case 2:putchar('b');break;
}
}
puts("");
return(0);
}
方法二:(很明显自己看)
while(nx!=lb)
{
switch(s[nx])
{
case 0: rr++;
temp=s[nx];
s[nx]=s[rr];
s[rr]=temp;
nx++;break;
case 1:nx++;break;
case 2:lb--;
temp=s[nx];
s[nx]=s[lb];
s[lb]=temp;break;
}
}
错误方法:(在数字少的时候可以输出,多了就效率极低甚至跑不出来我不知道为什么以后有缘再解释)
while(nx!=lb)
{
if(s[nx]==0)
{
rr++;
temp=s[nx];
s[nx]=s[rr];
s[rr]=temp;
nx++;
}
if(s[nx]==1)
{
nx++;
}
if(s[nx]==2)
{
lb--;
temp=s[nx];
s[nx]=s[lb];
s[lb]=temp;
}
}