首页 > 其他分享 >C3解决三色旗问题

C3解决三色旗问题

时间:2022-09-05 20:24:30浏览次数:55  
标签:begin end int 三色旗 current 解决 数组 旗子 C3

假设有一条绳子,上面挂有红、白、蓝三种颜色的旗子,没有顺序,每次移动两个旗子,使得颜色顺序为蓝,白红顺序,同时移动次数最少。

 

求解:可以定义一个指针数组,用地址的指向来移动数组内部的值,把蓝色旗子移到数组前面部分,白色旗子移到中间部分,红色旗子移动到数组后面部分,定义开头和结尾分别为begin和end

假设蓝色旗子为‘1’,白色旗子为‘2’,红色旗子为‘3’,定义一个整型current用来遍历数组,

遍历情况分为三种

遇到1:交换current和begin,current和begin向后+1

遇到2:不用交换,current+1

遇到3:交换current和end,end向前-1(防止交换之后current值为0,所以current不用+1)

 

代码如下

 1 #include<stdio.h>
 2 #define N 10
 3 void swap(int &a,int &b)//
 4 {
 5     int cache=a;
 6     a=b;
 7     b=cache;
 8 }
 9 void move(int *array)
10 {
11     int begin=0,end=N-1,current=0;
12     while(current<=end)
13     {
14         if(array[current]==1)
15         {
16             swap(array[begin],array[current]);
17             current++;
18             begin++;
19         }
20         else if(array[current]==2)
21         {
22             current++;
23         }
24         else
25         {
26         swap(array[current],array[end]);
27         end--;
28         }
29     }
30 }
31 int main ()
32 {
33     int a[N]={2,2,3,2,1,2,3,2,2,1};
34     move(a);
35     for(int i=0;i<N;i++)
36     {
37         printf("%d",a[i]);
38     }
39     return 0;
40 }

 

标签:begin,end,int,三色旗,current,解决,数组,旗子,C3
From: https://www.cnblogs.com/mayang150/p/sanseqi.html

相关文章