苹果与橙子

问题提出

有两种不同的水果,排成一排,苹果(1) 和橙子(0), 问最少需要交换多少次,使得苹果们排在一起,橙子们排在一起。
让这一排先是所有的苹果接着是所有的橙子。

解题思路

这道题如果用选择排序会很不方便,我们可以换一种思路

  1. 统计有多少个0
  2. 统计有多少个1
  3. sx=求应该是1的部分有多少个0
  4. sy=求应该是0的部分有多少个1
  5. output min(sx,sy);

代码

#include<iostream>
using namespace std;
int a[1001];
void myin(int n) {
for (int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
}
void myout(int n) {
for (int i = 1; i <= n; i++){
printf("%d ", a[i]);
}
printf("\n");
}
int main() {
int n;
cin >> n;
int c0 = 0, c1 = 0;
myin(n);
for (int i = 1; i <= n; i++){
a[i]==0?c0++:c1++;
}
int sx = 0, sy = 0;
for (int i = 1; i <= c1; i++){
if (a[i] == 0){
sx++;
}
}
for (int i = c1 + 1; i <= n; i++){ //注意,i的初值是c1+1而不是1
if (a[i] == 1){
sy++;
}
}
printf("%d", sx<sy?sx:sy);
return 0;
}

posted on   可爱楷玩算法  阅读(121)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示