• 计蒜客 三值排序


    三值排序

     

    排序是一种很频繁的计算任务。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。

    写一个程序计算出,计算出的一个包括1、2、3三种值的数字序列,排成升序所需的最少交换次数。

    输入第1行为类别的数量N(1≤N≤1000)

    输入第2行到第N+1行,每行包括一个数字(1或2或3)。

    输出包含一行,为排成升序所需的最少交换次数。

    样例输入

    9
    2
    2
    1
    3
    3
    3
    2
    3
    1

    样例输出

    4

    是一个贪心的思想。x=位置为1的地方非1的个数;y=位置为2的地方3的个数;z=位置为3的地方的2的个数。

    ans=x+max(y,z);

     1 #include"iostream"
     2 #include"algorithm"
     3 #define MAX 10000
     4 using namespace std;
     5 
     6 int a[MAX],num[4];
     7 int n, n1,n2,n3;
     8 
     9 
    10 void msort(int n, int *a)
    11 {
    12     for (int i = 0; i< num[1];i++)
    13     {
    14         if (a[i] != 1)
    15             n1++;
    16     }
    17 
    18     for (int i = num[1]; i< num[1]+num[2]; i++)
    19     {
    20         if (a[i] == 3)
    21             n2++;
    22     }
    23 
    24     for (int i = num[1] + num[2]; i<n; i++)
    25     {
    26         if (a[i] == 2)
    27             n3++;
    28     }
    29 }
    30 
    31 int main()
    32 {
    33     n1 = n2 = n3 = 0;
    34     cin >> n;
    35     for (int i = 0; i<n; i++)
    36     {
    37         cin >> a[i];
    38         num[a[i]]++;
    39     }
    40 
    41     msort(n, a);
    42 
    43     if (n2>n3) n1 += n2;
    44     else n1 += n3;
    45     cout<< n1;
    46 
    47     system("pause");
    48 }
  • 相关阅读:
    AngularJS 学习 (一)Start
    div固定位置,不随滚动条滚动
    两个单例小程序
    java实现人脸识别V3版本开发
    flex>行为和特效 小强斋
    flex>导航 小强斋
    flex>定位和布局 小强斋
    flex>菜单设计 小强斋
    flex>其他交互设计 小强斋
    flex>菜单设计 小强斋
  • 原文地址:https://www.cnblogs.com/SeekHit/p/5552619.html
Copyright © 2020-2023  润新知