/*
牛牛有n张卡片排成一个序列.每张卡片一面是黑色的,另一面是白色的。初始状态的时候有些卡片是黑色朝上,有些卡片是白色朝上。牛牛现在想要把一些卡片翻过来,得到一种交替排列的形式,即每对相邻卡片的颜色都是不一样的。牛牛想知道最少需要翻转多少张卡片可以变成交替排列的形式。
输入描述:
输入包括一个字符串S,字符串长度length(3 ≤ length ≤ 50),其中只包含'W'和'B'两种字符串,分别表示白色和黑色。整个字符串表示卡片序列的初始状态。
输出描述:
输出一个整数,表示牛牛最多需要翻转的次数。
输入例子1:
BBBW
输出例子1:
1
*/
#include<stdio.h>
int main(){
char a[50];
int count = 0;
scanf("%s",a);
if(sizeof(a)/2<3 || sizeof(a)/2>50){
printf("ERROR");
return 0;
}
int i = 0;
int wCount1 = 0;
int wCount2 = 0;
while (a[i] != '\0'){
if (i % 2 == 0) {
if (a[i] == 'W') {
wCount1++;
}
} else {
if (a[i] == 'W') {
wCount2++;
}
}
i++;
}
int wFlag = (wCount1 > wCount2 ? wCount1 : wCount2) > ((i - wCount1) > (i - wCount2) ? (i - wCount1) : (i - wCount2)) ? 1 : 0;
int flag = 1;
if (wFlag) {
flag = wCount1 > wCount2 ? 1 : 0;
} else {
flag = (i - wCount1) > (i - wCount2) ? 1 : 0;
}
int j = 0;
while (a[j] != '\0') {
if (flag) {
if (wFlag) {
if (j % 2 == 0 && a[j] == 'B') {
count++;
} else if (j % 2 != 0 && a[j] == 'W') {
count++;
}
} else {
if (j % 2 == 0 && a[j] == 'W') {
count++;
} else if (j % 2 != 0 && a[j] == 'B') {
count++;
}
}
} else {
if (wFlag) {
if (j % 2 != 0 && a[j] == 'B') {
count++;
} else if (j % 2 == 0 && a[j] == 'W') {
count++;
}
} else {
if (j % 2 != 0 && a[j] == 'W') {
count++;
} else if (j % 2 == 0 && a[j] == 'B') {
count++;
}
}
}
j++;
}
printf("%d",count);
return 0;
}
算法(一)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 冒泡排序是八大排序算法之一。其排序原理是每次都对相邻的两个数进行比较,如果前面一个数大于后面一个数,那就交换两个数...
- 上篇有个问题说道,当我们的待排序的数据数据量较大并且是线性结构时用快速排序进行排序操作。但是当我们要排序的数据是链...
- MD5加密MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法...
- 选择排序是八大排序算法之一,其排序原理是: 比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数...