第1关:打印杨辉三角形

任务描述

本关任务:打印杨辉三角形。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

相关知识

杨辉三角形的第i+1行是(a+b)^n的展开式的系数。

杨辉三角形有如下特点:

  1. 只有下半三角形有确定的值;
  2. 第一列和对角线上的元素值都是1;
  3. 其它元素值均是前一行同一列元素与前一行前一列元素之和。

编程要求

根据提示,在右侧编辑器补充代码,实现用户输入一个整数n,然后输出杨辉三角形的前n行。

测试说明

平台会对你编写的代码进行测试:

测试输入: 6 预期输出: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

提示:每个数据间用\t隔开。

最后通关代码

#include<stdio.h>

#define N 50

int main()

{

    int a[N][N],i,j,n;  

    scanf("%d",&n);  //输入打印行数

    /*********Begin*********/

// 初始化第一列和对角线上的元素为1

    for(i = 0; i < n; i++) {

        a[i][0] = 1;

        a[i][i] = 1;

    }

    // 填充其它元素

    for(i = 2; i < n; i++) {

        for(j = 1; j < i; j++) {

            a[i][j] = a[i-1][j-1] + a[i-1][j];

        }

    }

    // 打印杨辉三角形

    for(i = 0; i < n; i++) {

        for(j = 0; j <= i; j++) {

            printf("%d\t", a[i][j]);

        }

        printf("\n");

    }

    /*********End**********/

    return 0;

}

第2关:链接队列模拟医院排队系统

任务描述

本关任务:编写一个使用链接存储队列模拟医院就诊系统的程序。

相关知识

为了完成本关任务,你需要掌握:1.队列,2.问题描述。

队列

和栈相反,队列是先进先出的线性表,只允许在队尾rear插入(入队),队头front删除(出队)。

生活中有许多"先进先出"的例子,如: 银行排队等待取款的事件; 电影院排队买票的事件; 食堂窗口排队打饭的事件;

链队

队列有顺序存储和链式存储,这里简要说明一下链队: 队列的存储除了顺序存储之外也可以采用链接存储方式来实现。图 1 描述了队列的一种链接存储实现方案。

,

该队列存储了 3 个元素 {56,77,15} ,其中 56 为队列头, 15 为队列尾。

这种实现方案中涉及到的两个属性元素如下:

rear: 指向队列尾结点的指针; next: 指向队列头结点的指针。 当队列是空队列时,rear指向附加头结点,附加头结点的数据项等于 0 ,如图 2 所示。

,

基于这些属性要素组织成的链表结点的结构定义为:


  1. struct LNode {
  2. T data;
  3. LNode* next;
  4. };

为了讨论简单,我们假设队列元素的数据类型为整数:

typedef int T; // 队列元素的数据类型 据此,只要给定rear指针,我们就可以对队列进行入队和出队的操作。

在给定图 1 的状态下,进队一个元素 25 以后的状态如图 3 所示:

,

若出队一个元素是指将当前队列头结点去掉。则在给定图 3 的状态下,进行一次出队后的状态如图 4 所示:

,

问题描述

该模拟程序你要完成如下功能: 1.排队--输入患者遍历号没加入到患者队列中(入队); 2.就诊--排在最前面的患者就诊,并将他删除(出队); 3. 查看--查看排队等待数量及下一个患者(病历号)队列长度

编程要求

根据提示,在右侧文件中补全这些函数


  1. int CLQ_Length(LNode* rear)
  2. // 返回队列长度,rear指向尾结点
  3. {
  4. // 请在这里补充代码,完成本关任务
  5. /********** Begin *********/
  6. /********** End **********/
  7. }
  8. void CLQ_In(LNode* &rear, T x)
  9. // 入队列, 新结点加入链表尾部。rear指向尾结点
  10. {
  11. // 请在这里补充代码,完成本关任务
  12. /********** Begin *********/
  13. /********** End **********/
  14. }
  15. bool CLQ_Out(LNode* & rear, T& item)
  16. // 出队列。空队列时,返回值为false。rear指向尾结点
  17. //由item带回出队列的值
  18. {
  19. /********** Begin *********/
  20. /********** End **********/
  21. }

测试说明

平台会对你编写的代码进行测试:

测试输入:in 1 in 2 in 3 out out see out end 预期输出:1213

测试输入:see in 1 in 2 in 3 out out out 预期输出:0123

提示: in表示入队操作,out表示出队,see表示查看


开始你的任务吧,祝你成功!

截止后通关代码

 /*************************************************************

    date: March 2021

    copyright: Bei Gua (北瓜)

    DO NOT distribute this code.

**************************************************************/

// 队列的链接存储实现文件

// 采用循环链表,具有附加头节点,使用尾结点指针

// CLQ_   Circularly Linked Queue

////////////////////////////////////////

#include <stdio.h>

#include <stdlib.h>

#include "CLnkQueue.h"

LNode* CLQ_Create()

// 创建一个队列

{

    LNode* rear=(LNode*)malloc(sizeof(LNode));

    rear->data = 0;

    rear->next = rear;

    return rear;

}

void CLQ_Free(LNode* rear)

// rear指向尾结点

{

    CLQ_MakeEmpty(rear);

    free(rear);

}

void CLQ_MakeEmpty(LNode* & rear)

// rear指向尾结点

// 将队列变为空队列

{

    T item;

    while(!CLQ_IsEmpty(rear))

        CLQ_Out(rear,item);

}

bool CLQ_IsEmpty(LNode* rear)

// 判断队列是否为空

{

   

    return rear==rear->next;

}

int CLQ_Length(LNode* rear)

// 返回队列长度,rear指向尾结点

{

    // 请在这里补充代码,完成本关任务

    /********** Begin *********/

     if(rear == NULL) return 0;

    if(rear == rear->next) return 0; // empty queue

    LNode* p = rear->next->next;

    int count = 0;

    while (p != rear->next) {

        count++;

        p = p->next;

    }

    return count;

    /********** End **********/

}

void CLQ_In(LNode* &rear, T x)

// 入队列, 新结点加入链表尾部。rear指向尾结点

{

    // 请在这里补充代码,完成本关任务

    /********** Begin *********/

    LNode* newNode = (LNode*)malloc(sizeof(LNode));

    newNode->data = x;

    newNode->next = rear->next;

    rear->next = newNode;

    rear = newNode;

    /********** End **********/

}

bool CLQ_Out(LNode* & rear, T& item)

// 出队列。空队列时,返回值为false。rear指向尾结点

//由item带回出队列的值

{

    /********** Begin *********/

    if (rear == rear->next) return false;

    LNode* head = rear->next->next;

    item = head->data;

    rear->next->next = head->next;

    if(head == rear) {

        rear = rear->next;

    }

    free(head); // delete head node

    return true;

    /********** End **********/

}

bool CLQ_Head(LNode* rear, T& item)

// rear指向尾结点

// 获取队列头。空队列时返回值为false。

{

    if (CLQ_IsEmpty(rear))

        return false;

    item = rear->next->next->data;

    return true;

}

void CLQ_Print(LNode* rear)

// 打印队列

{

    if (CLQ_IsEmpty(rear))  {

        printf("The queue is: empty. \n");

        return;

    }

    LNode* node=rear->next->next;

    do {

        printf("%d  ", node->data);

        node = node->next;

    }   while (node != rear->next);

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐