• 序曲


    1.判断一串从小到大排序数组中的相同元素最多的个数。

    例:

     数组   1,1,2,2,2,2,3,3,3,3,3,6,6,6,6  中做多的元素是3,有5个;(最长平台)

    说明:

    (1)使用的变量越少越好

    (2)只能用一个循环语句

    (3)程序语句越少越好

    #include "stdio.h"
    void main()
    {
       int a[] = {1,1,2,2,2,2,3,3,3,3,3,6,6,6,6};
       int length = 1;

      for(int i = 1; i < 15; i++ )
         if(a[i] == a[ i - length])
         length++;

    printf("%d\n",length);
    }

    2.支配值数目已知f[] 和 g[] 两个从小到大排序好的数组(没有重复的)

     编写程序算出f[] 中的元素比 g[] 中元素达的个数的总和;

    例:f[] ={1,3,5,7,9}; g[] ={2,3,4,7,8};

    比g[0] 的有f[1]~f[4],   比g[1] 的有f[2]~f[4],    比g[2] 的有f[2]~f[4],   比g[3] 的有f[4],    比g[4] 的有f[4],

    因此答案是4+3+3+1+1 = 12;

    #include "stdio.h"

    void main()
    {
       int f[5] = {1,3,5,7,9};
       int g[5] = {2,3,4,7,8};

       int m,n,coun;
       coun = m = n = 0; 

      while(m < 5 && n < 5) 
        if(f[m] > g[n]) {
        coun += 5 - m;
        n++;
      }
        else
        m++;
    printf("%d\n",coun);
    }

    3.等值数目

    还是上面的例子,求两数组中相同的对 共有几对?

    #include "stdio.h"
    void main()
    {
    int f[5] = {1,3,5,7,9};
    int g[5] = {2,3,4,7,8};

    int m,n,coun;
    coun = m = n = 0;

    while(m < 5 && n < 5)
       if(f[m] > g[n]) 
         n++;
       else if(f[m] < g[n])
         m++;
       else 
         n++,m++,coun++;

       printf("%d\n",coun);
    }

  • 相关阅读:
    manacher算法笔记
    2019qbxtCSP-S2 模拟题1
    三元环计数
    踩坑日记
    我的Ubuntu16.04 安装配置
    SLAM14讲项目在 mac 上无法正常运行
    平面最近点对的算法实现
    hiho 1996
    【游记】NOIP2018 退役滚粗记
    铁板铮铮♂+习题集
  • 原文地址:https://www.cnblogs.com/shaoshao/p/2867667.html
Copyright © 2020-2023  润新知