此编程题重要的思想:是以空间换取时间,何谓以空间换取时间:
在这道编程题中就是重新构造一个数组,这个数组用来存放原数组中每个数字
出现的次数,而这个数组中每个数的下标是原数组中的每个数
废话少说,下面是代码:注释内容十分详细,如果有什么不懂的地方可以加我QQ:7700429进行询问!
#include<stdio.h>
#include<windows.h>
void Search(int a[], int len)//自定义一个函数,使用函数的调用去实现要求
{
int save[1000] = { 0 }; //将保存数组全部清零
int max=0; //用来记录数组中一个数出现最多的次数
int key; //用来记录数组中出现次数最多的数
int i = 0; //用来实现循环
for (i = 0; i < len; i++) //遍历整个数组
{
int index = a[i]; //把a数组中每个数赋值给index
save[index]++;
/* index作为save数组中的下标,如果原数组中数字重
复出现就把save数组中下标为index的数加一 */
}
for (i = 0; i < 1000; i++) //遍历save数组找到数组中最大的数
{
if (max < save[i])
{
max = save[i]; //将save数组中最大的数赋值给max
key = i; //将此时的i赋值给key
}
}
//打印出现出现次数最多的数和其出现的次数
printf("这个数组中出现最多的数是:%d,并且%d出现了%d次\n", key,key, max);
}
void main()
{
int array[] = { 1, 3, 3, 3, 3, 2, 1, 4, 3}; //随便定义一个数组
Search(array, sizeof(array)/sizeof(*array)); //调用上面的函数
/*
sizeof(array):代表整个数组所占的全部内存空间的大小
sizeof(*array):代表数组中首元素所占内存空间的大小
sizeof(array)/sizeof(*array)是数组array的长度
*/
system("pause");//暂停一下
}
下面是执行代码实现的效果: