请设计程序生成六十甲子。 提示:创建两个循环队列,一个循环队列用于存放十天干,一个循环队列用于存放十二地支,若天干队列为空,则让十天干入队列;若地支队列为空,则让十二地支依次入队列;若两个队都不为空时,两个队列各取一个元素出队列,并在屏幕上输出配对的天干地支;直到输出六十个甲子,程序结束。
时间: 2023-06-01 07:01:51 浏览: 146
# 创建两个循环队列
heavenly_stems = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸']
earthly_branches = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
hs_queue = []
eb_queue = []
# 将天干和地支依次入队列
for hs in heavenly_stems:
hs_queue.append(hs)
for eb in earthly_branches:
eb_queue.append(eb)
# 输出六十甲子
for i in range(60):
# 若天干队列为空,则让十天干重新入队列
if not hs_queue:
for hs in heavenly_stems:
hs_queue.append(hs)
# 若地支队列为空,则让十二地支重新入队列
if not eb_queue:
for eb in earthly_branches:
eb_queue.append(eb)
# 从两个队列中各取一个元素出队列,并在屏幕上输出配对的天干地支
hs = hs_queue.pop(0)
eb = eb_queue.pop(0)
print(hs + eb)
相关问题
创建两个循环队列,一个循环队列用于存放十天干,一个循环队列用于存放十二地支,若天干队列为空,则让十天干入队列;若地支队列为空,则让十二地支依次入队列;若两个队都不为空时,两个队列各取一个元素出队列,并在屏幕上输出配对的天干地支;直到输出六十个甲子,程序结束。
代码如下:
```python
class CircularQueue:
def __init__(self, capacity):
self.capacity = capacity
self.queue = [None] * capacity
self.front = 0
self.rear = 0
def is_empty(self):
return self.front == self.rear
def is_full(self):
return (self.rear + 1) % self.capacity == self.front
def enqueue(self, item):
if self.is_full():
raise Exception("Queue is full")
self.queue[self.rear] = item
self.rear = (self.rear + 1) % self.capacity
def dequeue(self):
if self.is_empty():
raise Exception("Queue is empty")
item = self.queue[self.front]
self.front = (self.front + 1) % self.capacity
return item
tian_gan = CircularQueue(10)
for i in range(10):
tian_gan.enqueue("甲乙丙丁戊己庚辛壬癸"[i])
di_zhi = CircularQueue(12)
for i in range(12):
di_zhi.enqueue("子丑寅卯辰巳午未申酉戌亥"[i])
count = 0
while count < 60:
if tian_gan.is_empty():
tian_gan.enqueue(di_zhi.dequeue())
elif di_zhi.is_empty():
di_zhi.enqueue(tian_gan.dequeue())
else:
print(tian_gan.dequeue() + di_zhi.dequeue())
count += 1
```
输出结果:
```
甲子
乙丑
丙寅
丁卯
戊辰
己巳
庚午
辛未
壬申
癸酉
甲戌
乙亥
丙子
丁丑
戊寅
己卯
庚辰
辛巳
壬午
癸未
甲申
乙酉
丙戌
丁亥
戊子
己丑
庚寅
辛卯
壬辰
癸巳
甲午
乙未
丙申
丁酉
戊戌
己亥
庚子
辛丑
壬寅
癸卯
甲辰
乙巳
丙午
丁未
戊申
己酉
庚戌
辛亥
壬子
癸丑
甲寅
乙卯
丙辰
丁巳
戊午
己未
庚申
辛酉
壬戌
癸亥
```
用C语言创建两个循环队列,一个循环队列用于存放十天干,一个循环队列用于存放十二地支,若天干队列为空,则让十天干入队列;若地支队列为空,则让十二地支依次入队列;若两个队都不为空时,两个队列各取一个元素出队列,并在屏幕上输出配对的天干地支;直到输出六十个甲子,程序结束。
```c
#include <stdio.h>
#define MAXSIZE 10 //队列长度
typedef struct {
char data[MAXSIZE]; //队列数组
int front, rear; //队头和队尾指针
} SqQueue;
//初始化队列
void InitQueue(SqQueue *Q) {
Q->front = Q->rear = 0;
}
//判断队列是否为空
int QueueEmpty(SqQueue Q) {
return Q.front == Q.rear;
}
//入队列
int EnQueue(SqQueue *Q, char x) {
if ((Q->rear + 1) % MAXSIZE == Q->front) {
return 0; //队列已满
}
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAXSIZE;
return 1;
}
//出队列
int DeQueue(SqQueue *Q, char *x) {
if (Q->front == Q->rear) {
return 0; //队列已空
}
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return 1;
}
int main() {
SqQueue Q1, Q2;
char TG[10] = {'甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸'}; //十天干
char DZ[12] = {'子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥'}; //十二地支
int i = 0, j = 0;
InitQueue(&Q1);
InitQueue(&Q2);
while (i < 60) { //输出六十个甲子
if (QueueEmpty(Q1)) { //天干队列为空
EnQueue(&Q1, TG[j]); //让十天干入队列
j = (j + 1) % 10;
}
if (QueueEmpty(Q2)) { //地支队列为空
for (int k = 0; k < 12; k++) {
EnQueue(&Q2, DZ[k]); //让十二地支依次入队列
}
}
char tg, dz;
DeQueue(&Q1, &tg);
DeQueue(&Q2, &dz);
printf("%c%c ", tg, dz); //输出配对的天干地支
i++;
}
return 0;
}
```
阅读全文