声野 2021-09-22 10:35 采纳率: 25%
浏览 44
已结题

求这段代码的注释,求注释

围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:“可以,但必须找到我,我就藏身于这十个洞中,你先到1号洞找,第二次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,以后如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。问兔子究竟藏在哪个洞里?

#include "stdio.h"

#include "stdlib.h"

#define OK 1

#define OVERFLOW -2

typedef int status;

typedef int ElemType;

#define LIST_INIT_SIZE 10

typedef struct {

   ElemType *elem;                

   int length;                           

   int listsize;                        

}SqList;

status InitList_Sq(SqList *L){

   (*L).elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));

   if(!((*L).elem))   return OVERFLOW;    

   (*L).length=0;                                                

   (*L).listsize=LIST_INIT_SIZE;          

   return OK;

} //InitList_Sq

status Rabbit(SqList *L){

   int i,current=0;             

   for(i=0;i<LIST_INIT_SIZE;i++)

          (*L).elem[i]=1;            

   (*L).elem[LIST_INIT_SIZE-1]=0;

   (*L).elem[0]=0;                  

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

          current=(current+i)%LIST_INIT_SIZE;            

          (*L).elem[current]=0;                                      

   }

printf("\n兔子可能藏在如下的洞中:") ;

for(i=0;i<LIST_INIT_SIZE;i++)

          if((*L).elem[i]==1)

                 printf("  \n此洞是第%d号洞 !",i+1);            

          return OK;

}

void main(){

   SqList *L=( SqList *)malloc(sizeof(SqList));

   InitList_Sq(L);

   Rabbit(L);

}

  • 写回答

2条回答 默认 最新

  • Tony_Bean 2021-09-22 12:33
    关注
    
    #include "stdio.h"
    #include "stdlib.h"
    //定义三个宏变量
    #define OK 1
    #define OVERFLOW -2
    #define LIST_INIT_SIZE 10
    //定义两个int的别名
    typedef int status;
    typedef int ElemType;
    
    /// <summary>
    /// 定义包含elem、length、listsize三个字段的结构体
    /// ElemType*类型为int指针
    /// 这个结构体本质上是一个链表
    /// </summary>
    typedef struct {
        ElemType* elem;
    
        int length;
    
        int listsize;
    }SqList;
    
    /// <summary>
    /// 初始化链表的函数
    /// </summary>
    /// <param name="L"></param>
    /// <returns></returns>
    status InitList_Sq(SqList* L) {
    
        //给指针分配大小为LIST_INIT_SIZE个int(ElemType)的内存空间,这个空间存储链表所有的值
        (*L).elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
        //如果(*L).elem返回假,代表分配空间失败,即内存空间不足,返回堆栈溢出异常(开头定义了-2)
        if (!((*L).elem))   return OVERFLOW;
        //初始化链表参数
        (*L).length = 0;
        (*L).listsize = LIST_INIT_SIZE;
        //返回成功(开头定义了1)
        return OK;
    } //InitList_Sq
    
    /// <summary>
    /// 搜索兔子的方法,穷举法
    /// </summary>
    /// <param name="L"></param>
    /// <returns></returns>
    status Rabbit(SqList* L) {
    
        //初始化数值
        int i, current = 0;
    
        //初始化链表,全部值赋1
        for (i = 0; i < LIST_INIT_SIZE; i++)
            (*L).elem[i] = 1;
    
        //链表第一个和最后一个赋值0,即1号洞和10号洞
        //这里的1号洞赋值0意义为一开始第一个搜索的就是1号洞,即current所代表的洞口
        //10号洞赋值0的意义不明,在本案例中不影响结果
        (*L).elem[LIST_INIT_SIZE - 1] = 0;
        (*L).elem[0] = 0;
    
        //循环穷举,将遍历到的位置的值赋值为0(即狐狸会找到的洞)
        for (i = 2; i <= 1000; i++) {
    
            //将current索引改变至下一个要找的洞编号,%为取余符号,因为是圆形排列的洞口,11就代表1(11%10=1)
            current = (current + i) % LIST_INIT_SIZE;
            //当前搜索的洞口赋值为0
            (*L).elem[current] = 0;
        }
    
        printf("\n兔子可能藏在如下的洞中:");
    
        //遍历所有的洞,此时为1的洞即为狐狸不可能找到的洞
        for (i = 0; i < LIST_INIT_SIZE; i++)
        {
            if ((*L).elem[i] == 1)
            {
                printf("  \n此洞是第%d号洞 !", i + 1);
            }
        }
          
        return OK;
    }
    
    void main() {
        //初始化结构体,分配结构体所占用的内存空间,这个结构体就代表着所有的兔子洞
        SqList* L = (SqList*)malloc(sizeof(SqList));
        
        InitList_Sq(L);
    
        Rabbit(L);
    }
    

    c不是很熟,但是大体上应该是这么个意思

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月2日
  • 已采纳回答 9月24日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机