题目描述 Zero有很多明信片和照片一条线挂在墙上。他决定把它们放进衣柜,把墙空出来挂上五月天的海报。Zero必须把所有的明信片和照片放进衣柜,他不能跳过某一张明信片或照片而直接去拿下一张,他不喜欢同时拿明信片和照片,他一次最多能拿5样东西。请帮他计算一下要搬运的最少次数吧。 输入要求 输入只包含“C”和“P”的字符串,最长为100。C代表明信片,P代表照片。字符串第i个字符表示第i个对象,顺序为从左到右。 输出要求 搬运的最少次数 输入样例 CPCPCPC CCCCCCPPPPPP CCCCCCPPCPPPPPPPPPP 输出样例 7 4 6。C语言
时间: 2024-03-08 19:48:46 浏览: 108
以下是使用C语言实现的代码:
```c
#include <stdio.h>
int main() {
char str[100];
int cnt_c = 0, cnt_p = 0, cnt_move = 0;
while (scanf("%s", str) != EOF) {
cnt_c = 0, cnt_p = 0, cnt_move = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == 'C') cnt_c++;
else if (str[i] == 'P') cnt_p++;
}
while (cnt_c > 0 || cnt_p > 0) {
int cnt = 0;
for (int i = 0; i < 5; i++) {
if (cnt_c > 0) {
cnt_c--;
cnt++;
}
else if (cnt_p > 0) {
cnt_p--;
cnt++;
}
}
cnt_move++;
}
printf("%d ", cnt_move);
}
return 0;
}
```
这个程序可以多次处理输入,每次输入一个字符串并输出对应的搬运次数。
首先,我们使用`while`循环,每次使用`scanf()`函数读取一个字符串。
然后,使用`for`循环遍历字符串中的每个字符,统计明信片和照片的数量。
接着,使用`while`循环,每次最多搬运5个物品,直到所有物品都被搬运完毕。每次搬运完成后,搬运次数加1。
最后,使用`printf()`函数输出搬运次数,并在末尾加上一个空格,以便输出多个结果。
注意,每次处理完字符串后需要将`cnt_c`、`cnt_p`和`cnt_move`清零,否则会影响下一次的计算。
阅读全文