序曲

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

原文地址:https://www.cnblogs.com/shaoshao/p/2867667.html