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