#include<stdio.h>
int main()
{
int a;
scanf("%d", &a);
int data[10000];
int aa[100005] = { 0 };
int bb[100005] = { 0 };
for (int i = 0; i < a; i++)
{
scanf("%d", &data[i]);
}
for (int i = 0; i < a; i = i + 2)
{
aa[data[i]]++;
}
for (int i = 1; i < a; i = i + 2)
{
bb[data[i]]++;
}
int max1 = 0;
int max2 = 0;
int q, w;
for (int i = 0; i <= 100000; i++)
{
if (aa[i] > 0)
{
if (aa[i] > max1)
{
max1 = aa[i];
q = i;
}
}
if (bb[i] > 0)
{
if (bb[i] > max2)
{
max2 = bb[i];
w = i;
}
}
}
int sum = 0;
for (int i = 0; i < a; i++)
{
if (i % 2 == 0)
{
if (data[i] != q)
{
sum++;
}
}
if (i % 2 == 1)
{
if (data[i] != w)
{
sum++;
}
}
}
printf("%d", sum);
}
解题算法思路:
1、普通的多实例输入省略~~~~~~~
2、首先想如何判断这个数组中的数重复最多的次数
aa[data[i]]++; aa,bb,均代表记录重复数 将输入的数以此存入数组并且++这样就实现了
可以避免覆盖很简洁的一种表达方式,然后遍历aa[]数组找到最大的循环次数以及 data[i]数据
3、遍历数组data[]比较和 aa[]和bb如果不一样的话则sum++ 就是改变的次数.
总结:
这道题总归来说思路可以想到但是对初学者(我)来说这道题可以说是教科级别的,感谢学长和同学还有老师对我这道题的解析,我的思路并不详细,会不断更新!!!!,希望各位大佬提点意见例如简便算法或者更好的总结这个题,哈哈哈哈感谢!