首页 > 编程语言 >油管视频《编程思维》中的题目,使用C语言编写出来,第三集,炉膛机器人

油管视频《编程思维》中的题目,使用C语言编写出来,第三集,炉膛机器人

时间:2024-07-25 12:27:01浏览次数:14  
标签:编码 第三集 机器人 Robot C语言 123 炉膛 newRobot

题目 :假设起初只有一个机器人,他的炉膛里有一个数字0,和另一个未知的任意生成的编码,随着推移,原始机器人自我复制,制造出更多一样的炉膛机器人,被原始机器人自我复制制造出的每一个子机器人的熔炉内,都继承了原始机器人未知的编码,并且有一个属于自己,独一无二的编码刻在外壳,第二代炉膛机器人,也通过同样的方法自我复制,永远将属于自己的编码,传承给自己的子机器人的熔炉,就这样传承了很多代,如今每一个炉膛机器人,都从自己母机器人那接受指令,所以请问该如何在一群机器人大军中,找到最原始的机器人。

 涉及编程的基础原理

1,递归思维:通过递归遍历机器人链,直到找到最原始的机器人。

2,指针和结构体:使用结构体来定义机器人的属性,并通过指针来链接机器人链。

3,链表:使用链表来表示机器人的继承关系。

具体程序的编写

//第一大部分,头文件,提供必要的库函数

#include <stdio.h>

#include <stdlib.h>//动态内存分配的库

#include <string.h>//字符串的标准库

//第二大部分,结构体定义,定义了机器人的数据结构,是整个程序的基础

typedef struct Robect{//typedef是一个关键字,用于现有数据类型定义一个新名字,struct用来定义结构体

        
    int furnaceCode;       // 炉膛编码
    int uniqueCode;        // 独一无二的外壳编码
    struct Robot *mother;  // 指向母机器人的指针

} Robect;//定义了一个robect的结构体

//第三大部分,创建机器人函数,动态创建机器人实际例子,并设置继承关系

Robot* createRobot(int furnaceCode, int uniqueCode, Robot *mother){//定义了一个函数createrobot用来创建新的机器人。

        Robect *newRobot=(Robot*)malloc(sizeof(Robot));//

       在堆上分配一块大小为 Robot 结构体的内存。将分配的内存地址转换为 Robot* 类型的指针。将这个指针赋值给 newRobot,使 newRobot 指向新分配的 Robot 结构体。

        newRobot->furnaceCode = furnaceCode;//设置新机器人的炉膛编码。

  newRobot->uniqueCode = uniqueCode;//设置新机器人的独一无二的外壳编码。

  newRobot->mother = mother;//设置新机器人的母机器人指针。

  return newRobot;//返回新创建的机器人指针。

}

//第四大部分,递归查找函数,用递归查找最原始的机器人

Robot* findOriginalRobot(Robot *robot){

//定义一个函数 findOriginalRobot,用于递归查找最原始的机器人。

        if(robot==NULL|| robot->mother==NULL){

        return robot;//如果当前机器人为空或母机器人指针为空,则返回当前机器人。

        }

        return findOriginalRobot(robot->mother);//否则,递归调用 findOriginalRobot,传入当前机器人的母机器人。

 }

//第五部分,主函数,程序的入口,负责创建机器人链,并调用 findOriginalRobot 函数查找最原始的机器人。它还负责输出结果和释放内存。

int main(){

        Robot *originalRobot = creatRobot(123,1,NULL);//创建原始机器人人,炉膛编码是123,外壳编码是1,没有母机器人

        Robot*robot2=creatRobot(123,2,original);//创建第二代机器人,继承炉膛编码为123,外壳编码为2,母机器人是originalRobot

        Robot *robot3=creatRobot(123,3,robot2);//创建第三代机器人,继承炉膛编码为123,外壳编码为3,母机器人为robot2

        Robot*robot4=creatRobot(123,4,robot3);//创建第四代机器人,继承炉膛编码123,外壳编码为4,母机器人为robot3

        Robot* foundOriginal=foundOriginalRobot(robot4);调用 findOriginalRobot 函数,从 robot4 开始 递归,查找最原始的机器人。

        if(foundOriginal != NULL){

        printf("The original robot has unique code: %d\n", foundOriginal->uniqueCode); 

        } else { printf("No original robot found.\n");}//判断是否找到最原始的机器人。如果找到,输出最原始机器人的独一无二的外壳编码。如果未找到,输出提示信息。

        free(originalRobot);

        free(robot2);

        free(robot3);

        free(robot4);//栈和堆的知识点掌握,释放分配的内存,防止内存泄漏。

        return 0;

}

以上程序只是作为初学者,纯纯自己比划,有不对请随时指正

标签:编码,第三集,机器人,Robot,C语言,123,炉膛,newRobot
From: https://blog.csdn.net/liyunlong1111/article/details/140679388

相关文章

  • 队列及其C语言实现
    2.3队列2.3.1什么是队列队尾入队,队头出队,一个受限制性的线性表。队列(Queue):具有一定操作约束的线性表•插入和删除操作:只能在一端插入,而在另一端删除。•数据插入:入队列(AddQ)•数据删除:出队列(DeleteQ)•先来先服务•先进先出:FIFO 2.3.2队列的抽象数据类型描述 ......
  • C语言面向对象风格编程解惑-全局变量性能分析
    C语言面向对象风格编程解惑-全局变量性能分析如果你是CPP老手,但在软件开发过程中要求采用C语言作为主要语言,首先遇到的是各种设计模式不方便应用了,感到非常困扰,然后就是认命之后走向另外一个极端,常常会有过度使用全局变量和goto语句的问题。CPP既然是CWithClass,自然不会排斥面......
  • Tower Of Hanoi - 汉诺塔问题(C语言)
    ☆WelcometoHouse'sblog!☆本人主页:神王豪斯(重拾基础期)-CSDN博客所属专栏:重拾C语言——神王降世的第一步!_神王豪斯(重拾基础期)的博客-CSDN博客1.游戏规则-有三根柱子(通常分别命名为A、B、C)和若干大小不同的圆盘。-最初,所有圆盘按照从大到小的顺序堆叠在一根柱子(比如......
  • 【 C语言 】 C语言设计模式
    一、C语言和设计模式(继承、封装、多态)C++有三个最重要的特点,即继承、封装、多态。我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性。(1)继承性[cpp]viewplaincopytypedefstruct_parent{intdata_parent;......
  • C语言程序设计练习(三)
    1.整型数据类型存储空间大小#include<stdio.h>intmain(){printf("Sizeofint:%zubytes\n",sizeof(int));printf("Sizeofshort:%zubytes\n",sizeof(short));printf("Sizeoflong:%zubytes\n",sizeof(l......
  • C语言:数组
    hello,大家好今天我们来讲解c语言中数组的知识。一、数组的概念数组是⼀组相同类型元素的集合;数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组中存放的多个数据,类型是相同的。数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。二、一维数组 1......
  • c语言--数组详解
    数组的概念数组是一组相同类型元素的集合;从这个概念我们就可以发现2个有价值的信息:数组中存放的是1个或多个数据,但是数组的元素不能为0。数组中存放的多个数据,类型是相同的。数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。一维数组1.一维数组的创建和初......
  • C语言学习day03
    变量概念表面:程序运行过程中取值可以改变的数据实质:变量其实代表了一块内存区域/单元/空间。变量名可视为该区域的标识。整个变量分为三部分:  变量名:这个只是变量的一个标识,我们借助变量名来存取数据。  变量空间/内存单元:这个就是内存中分配的一块用来存储数据的......
  • C语言——数据类型
    C语言——数据类型C语言中的数据类型种类整型整型的常量形式整型的变量形式整型类型的分类整型数据在内存中的存储浮点型浮点型的大小浮点型数据的存储浮点数的比较问题字符型C语言中的数据类型种类数据类型可分为基本数据类型(整型,浮点型,字符型,枚举类型),构造数据类......
  • c语言-数组(1)
    5.数组(1)数组的意义:保存多个具有相同数据类型的数据特点:(1)具有相同的数据类型。(2)数据的地址是连续的 数组的表现形式类型标识符[长度];数组的空间大小 数组的空间大小=单个数据的空间大小*长度tip:已知数组table,求该数组的长度?intl=sizeof(table)/sizeof(......