用一个字符串代表小朋友队列。字符串中只会出现两个字符,分别代表小男孩和小女孩,首先出现的字符代表小男孩,另一个字符代表小女孩。小孩总数不超过100。按小女孩编号顺序,顺序输出手拉手离开队列的小男孩和小女孩的编号对,每行一对编号,编号之间用一个空格分隔。
时间: 2024-03-06 22:51:46 浏览: 86
这个问题可以使用队列数据结构来解决。首先将字符串中的小孩编号按照出现顺序依次入队。然后从队列中依次出队两个小孩,一个小男孩和一个小女孩,输出他们的编号即可。
下面是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100
// 队列结构体
typedef struct {
char data[MAX_SIZE];
int front;
int rear;
} Queue;
// 初始化队列
void InitQueue(Queue *q)
{
q->front = q->rear = 0;
}
// 判断队列是否为空
int IsEmpty(Queue *q)
{
return q->front == q->rear;
}
// 入队
void EnQueue(Queue *q, char x)
{
if ((q->rear + 1) % MAX_SIZE == q->front) {
printf("Queue is full.\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
}
// 出队
char DeQueue(Queue *q)
{
if (IsEmpty(q)) {
printf("Queue is empty.\n");
return '\0';
}
char x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return x;
}
int main()
{
char str[MAX_SIZE];
Queue q;
int n, i;
// 输入字符串和小孩总数
printf("Input the queue of children: ");
scanf("%s", str);
printf("Input the number of children: ");
scanf("%d", &n);
// 将字符串中的小孩编号按顺序入队
InitQueue(&q);
for (i = 0; i < strlen(str); i++) {
EnQueue(&q, str[i]);
}
// 依次出队两个小孩,输出他们的编号
for (i = 0; i < n && !IsEmpty(&q); i += 2) {
char boy = DeQueue(&q);
while (boy != 'B' && !IsEmpty(&q)) {
boy = DeQueue(&q);
}
char girl = DeQueue(&q);
while (girl != 'G' && !IsEmpty(&q)) {
girl = DeQueue(&q);
}
if (boy == 'B' && girl == 'G') {
printf("%d %d\n", i + 1, i + 2);
}
}
return 0;
}
```
输入示例:
```
Input the queue of children: BBGBGBGGGG
Input the number of children: 8
```
输出示例:
```
1 3
5 6
7 8
```
阅读全文