1. 程式人生 > >1、黑白卡片--全國模擬(四)

1、黑白卡片--全國模擬(四)

第一個 存在 編程 mes col 1.8 != 整數 解題思路

[編程題] 黑白卡片 時間限制:1秒 空間限制:32768K 牛牛有n張卡片排成一個序列.每張卡片一面是黑色的,另一面是白色的。初始狀態的時候有些卡片是黑色朝上,有些卡片是白色朝上。牛牛現在想要把一些卡片翻過來,得到一種交替排列的形式,即每對相鄰卡片的顏色都是不一樣的。牛牛想知道最少需要翻轉多少張卡片可以變成交替排列的形式。 輸入描述: 輸入包括一個字符串S,字符串長度length(3 ≤ length ≤ 50),其中只包含‘W‘和‘B‘兩種字符串,分別表示白色和黑色。整個字符串表示卡片序列的初始狀態。 輸出描述: 輸出一個整數,表示牛牛最多需要翻轉的次數。 輸入例子: BBBW
輸出例子: 1 解題思路:考慮與左側第一個不變為基準找,和以右側第一個不變為基準找,然後求count最小值
 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     string s;
 6     while(cin>>s)
 7     {
 8         int length  = s.size();
 9         cout<<length<<endl;
10         int count1 = 0;//左側為基準開始算的數目
11
int count2 = 0;//右側為基準開始算的數目 12 char temp1 = s[0]; 13 char temp2 = s[length-1]; 14 for(int i=1;i<length;i++) 15 { 16 if(s[i] != temp1) 17 { 18 temp1 = s[i]; 19 } 20 else 21 { 22 count1++;
23 if(s[i] == W) 24 { 25 temp1 = B; 26 } 27 else 28 { 29 temp1 = W; 30 } 31 } 32 } 33 for(int i=length-2;i>=0;i--) 34 { 35 if(s[i] != temp1) 36 { 37 temp1 = s[i]; 38 } 39 else 40 { 41 count2++; 42 if(s[i] == W) 43 { 44 temp1 = B; 45 } 46 else 47 { 48 temp1 = W; 49 } 50 } 51 } 52 if(count1>count2) 53 { 54 cout<<count2<<endl; 55 } 56 else 57 { 58 cout<<count1<<endl; 59 } 60 } 61 return 0; 62 63 }
只過了60%,改思路存在問題,不一定,左側第一個或者右側第一個一定不變 正確解題思路:最後排好的字符串是以BW開頭或者以WB開頭,分別計算一遍,求最小的count即可
 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     string s;
 6     while(cin>>s)
 7     {
 8         int length  = s.size();
 9         int count1 = 0;//左側為BW開始算的數目
10         int count2 = 0;//左側為WB開始算的數目
11         for(int i=0;i<length;i++)
12         {
13             if(i%2 == 0)
14             {
15                 if(s[i] != B)
16                 {
17                     count1++;
18                 }
19             }
20             else
21             {
22                 if(s[i] != W)
23                 {
24                     count1++;
25                 }
26             }
27         }
28         for(int i=0;i<length;i++)
29         {
30             if(i%2 == 0)
31             {
32                 if(s[i] != W)
33                 {
34                     count2++;
35                 }
36             }
37             else
38             {
39                 if(s[i] != B)
40                 {
41                     count2++;
42                 }
43             }
44         }
45         if(count1>count2)
46         {
47             cout<<count2<<endl;
48         }
49         else
50         {
51             cout<<count1<<endl;
52         }
53     }
54     return 0;
55  
56 }


1、黑白卡片--全國模擬(四)