QY12. 红和绿
描述
牛牛有一些排成一行的正方形。每个正方形已经被染成红色或者绿色。牛牛现在可以选择任意一个正方形然后用这两种颜色的任意一种进行染色,这个正方形的颜色将会被覆盖。牛牛的目标是在完成染色之后,每个红色R都比每个绿色G距离最左侧近。牛牛想知道他最少需要涂染几个正方形。输入描述
输入包括一个字符串s,字符串s长度length(1 ≤ length ≤ 50),其中只包括'R'或者'G',分别表示红色和绿色。输出描述
输出一个整数,表示牛牛最少需要涂染的正方形数量示例1
输入:
RGRGR
输出:
2
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-12-23
#include <stdio.h> #include <string.h> #define N 50 int main() { char ch[N]; scanf("%s",ch); int n,i,j,count=0; n=strlen(ch); int min=n; for(i=0;i<n;i++) { count=0; for(j=0;j<i;j++) if(ch[j]=='G') count++; for(j=i;j<n;j++) if(ch[j]=='R') count++; if(count<min) min=count; } printf("%d\n",min); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 348KB, 提交时间: 2020-10-29
#include <stdio.h> #include <string.h> #define N 50 int main() { char ch[N]; scanf("%s",ch); int n,i,j,count=0; n=strlen(ch); int min=n; for(i=0;i<n;i++) { count=0; for(j=0;j<i;j++) if(ch[j]=='G') count++; for(j=i;j<n;j++) if(ch[j]=='R') count++; if(count<min) min=count; } printf("%d\n",min); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 356KB, 提交时间: 2019-04-10
#include <stdio.h> #include <string.h> #define N 50 int main() { char ch[N]; scanf("%s",ch); int n,i,j,count=0; n=strlen(ch); int min=n; for(i=0;i<n;i++) { count=0; for(j=0;j<i;j++) if(ch[j]=='G') count++; for(j=i;j<n;j++) if(ch[j]=='R') count++; if(count<min) min=count; } printf("%d\n",min); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2019-08-31
#include <stdio.h> #include <string.h> /*-------------------------------------- We regard N(i) as the difference degree between the input string and string "RR...RGGG..G" which contains i 'R's, We called this string as "i string". Then we get N(i+1) = N(i) + d_i, d_i = 1 if i-th character of input string is the same as the i-th character of "i string" ----------------------------------------*/ int Find_min(char* ipstr, int n) { int cur = 0, cur_min; for (int i = 0; i < n; i++){ if (*(ipstr+i) != 'G') cur++; } cur_min = cur; for (int i = 0; i < n; i++){ if (*(ipstr+i) == 'G'){ cur++; } else{ cur--; if (cur < cur_min){ cur_min = cur; } } } return cur_min; } int main(){ char s[51]; scanf("%s", s); printf("%d", Find_min(s, strlen(s))); }
C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2019-05-26
#include <stdio.h> #include <string.h> #define N 50 int main() { char ch[N]; scanf("%s",ch); int n,i,j,count=0; n=strlen(ch); int min=n; for(i=0;i<n;i++) { count=0; for(j=0;j<i;j++) if(ch[j]=='G') count++; for(j=i;j<n;j++) if(ch[j]=='R') count++; if(count<min) min=count; } printf("%d\n",min); return 0; }