/*
牛牛有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;
}
算法(一)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 冒泡排序是八大排序算法之一。其排序原理是每次都对相邻的两个数进行比较,如果前面一个数大于后面一个数,那就交换两个数...
- 上篇有个问题说道,当我们的待排序的数据数据量较大并且是线性结构时用快速排序进行排序操作。但是当我们要排序的数据是链...
- MD5加密MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法...
- 选择排序是八大排序算法之一,其排序原理是: 比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数...