zoukankan      html  css  js  c++  java
  • 递归 段错误 习题

    段错误

    1. 递归里面算阶乘 f(10000000)没有输出,使用gdb 显示 SIGSEGV--段错误
    2. 编译后产生的可执行文件里面保存着什么?
      1. UNIX/Linux 用 ELF
      2. DOS下用COFF
      3. Windows用PE(COFF扩充而得)
    3. 段(segmentation)
      1. 二进制文件内的区域。
      2. 可用size程序得到可执行文件中的各个段的大小
      3. Text Segment--正文段--储存指令
      4. Data Segment--数据段--储存已初始化的变量
      5. BSS Segment--BSS段--未赋值的全局变量
      1. 栈不储存在可执行文件内,而是在运行时创建
      2. 调用栈所在的段成为Stack Segment
      3. 和其他段一样,不能越界访问,否则会stack overflow
      4. 调用栈保存函数的调用关系和局部变量
      5. 栈空间的大小
        1. linux 通过ulimit修改 ulimit -a显示当前栈的大小, ulimit -s 32768 把栈大小指定为32MB
        2. windows 用gcc指定执行文件的栈大小,-Wl,--stack=<byte count>
      6. 局部变量也是放在堆栈段中,栈溢出不一定是因为递归调用太多次,可能是局部变量太大。因此建议“把较大的数组放在main函数外。

    竞赛题目

    1. 刽子手游戏
      1. 看输入字符和给定字符关系
      2. 使用全局变量可便于维护内容,可以免去过多的参数传递。
      3. 猜过的字母再猜一次算错:将猜过的字母从答案内“删去”(改成不可能满足为答案的条件的数据)
    2. 救济金发放
      1. 一圈官员,两个官员逆时,顺时针数k, m个数,停下,被选中的离开队伍(可能是同一个人)
      2. #include<stdio.h>
        #define maxn 25
        int n,k,m,a[maxn];
        //逆时针走t步,步长为d 返回新位置
        int go(int p,int d,int t)
        {
            while(t--)
            {
                do
                {    
                    //前面减去1??? 
                    p=(p+d+n-1)%n+1;        //注意这里经过的数字是步数加一! 因此会有最后的+1; 
                }
                while(a[p]==0);
            }
            return p;
         } 
         int main()
         {
             while(scanf("%d%d%d",&n,&k,&m))
             {
                 for(int i=1;i<=n;i++) a[i]=i;
                 int left=n;
                 int p1=n,p2=1;
                 while(left)
                 {
                     p1=go(p1,1,k);
                    p2=go(p2,-1,m);
                    printf("%3d",p1);left--;
                    if(p2!=p1)
                    {
                        printf("%3d",p2);
                        left--;
                    }
                    a[p1]=a[p2]=0;
                    if(left)
                    printf(",");
                 }
                 printf("
        ");
             }
             return 0;
         }
    3. 信息解码
      1. 01字符串,长度会逐渐增加,且不存在全1的串。 编写一个解码程序,输入一个编码头,则序列的每个串对应一个字符。再编码文本。每个小结前三个数字表示编码长度,每小节以全1结束,编码以000结束。
  • 相关阅读:
    PHP 日志专题
    ThinkPHP 3.2 用户注册邮箱验证帐号找回密码
    ThinkPHP 3.2 用户注册邮箱验证激活帐号
    ThinkPHP 3.2 vendor()方法的深入研究及Phpqrcode的正确扩展
    基于Composer的Laravel扩展包开发工作流
    如何利用showdoc自动生成API文档
    PHP中的几个随机数生成函数
    isset在php5.6-和php7.0+的一些差异
    PHP学习方向-进阶2(三)
    Jupyter Notebook 下安装 PHP 内核
  • 原文地址:https://www.cnblogs.com/xuwanwei/p/10753888.html
Copyright © 2011-2022 走看看