太懒了 毕竟这道题解法太明显 直接上代码吧


第十一周课堂作业(二)_i++

方法一:

#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;
}

}