编写函数 : 求数组中元素出现次数超过数组长度一半的数字。如: {1,2,3,2,2,2,5,4,2} 数字 2 为超过数组长度一 半的数字。
代码如下:(VS2019)
#include<stdio.h>
void Init(int* ch, int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
scanf("%d", &ch[i]);
//printf("%d ", ch[i]);
}
}
//查找!
void Over(int* ch, int n)
{
//冒泡排序-从小到大!
int i = 0;
//n-1趟
for (i = 0; i < n-1; i++)
{
//每趟交换n-i-1
int j = 0;
for (j = 0; j < ( n - i-1); j++)
{
if (ch[j] > ch[j + 1])
{
int tmp = ch[j];
ch[j] = ch[j + 1];
ch[j + 1] = tmp;//大
}
}
}
//遍历count++-改正
int count = 1;
int p = ch[0];
for (i = 1; i < n; i++)
{
if (count > (n / 2))
{
printf("%d\n", p);
break;
}
if (ch[i] != p)
{
count = 1;//很必要!-类似于新的开始就被归零!
p = ch[i];
}
else
{
count++;
}
}
if(count <= (n / 2))
printf("不存在这样的数!\n");
}
int main()
{
int ch[100] = { 0 };
int n = 0;
printf("请输入你想要的数组里面的数字个数:");
scanf("%d", &n);
Init(ch, n);
Over(ch, n);
return 0;
}
解答思路:
1.遍历求count++ 出现问题:(以下有解答思路)
遍历思路
int a[] = { 1,2,2,2,2,2,3,4,5 };
int p = a[0];
int count = 1;
for (int i = 1; i < 9; i++)
{
if (count > ((sizeof(a) / sizeof(a[0])) / 2))
{
printf("%d\n", p);
}if (p != a[i])
{
count = 1; //此处一定要!
p = a[i];
}
else
{
count++;
}
}
2.总体思路:
1)for循环输入数组
2)冒泡排序 (相邻两个数比较- n-1 趟 每趟 n-i 对数 )
3)for循环遍历 count++
小结:
注意代码中的标注点! 加油 坚持呀K!