zoukankan      html  css  js  c++  java
  • 有关算法与数据结构的考题解答参考汇总 [C++] [链表]

    早先年考研的主考科目正是【算法与数据结构】,复习得还算可以。也在当时[百度知道]上回答了许多相关问题,现把他们一起汇总整理一下,供读者参考。


    【1】

    原题目地址:
    https://zhidao.baidu.com/question/1495132662371543299.html?entry=qb_uhome_tag

    题目:使用C++如何将字符串中的除空格外的其他元素赋给一个字符数组?
    比如说,我有一个字符串“how are you”,现在希望将它赋给一个字符类型的数组a[],希望

    a[1]=='how',a[2]=='are',a[3]=='you'

    答:

    #include<stdio.h>
    #include <windows.h>
     
    void Func(char (*p)[10],char b[],int *pval)
    {
        int j,i,t=0;
        for(i=0,j=0; b[i]!=''; i++,j++)
        {
            if(b[i]==' ')                //遇到空格
            {
                p[t][j]='';
                j=-1;
                t++;
            }
            else                        //遇到是单词
                p[t][j]=b[i];
        }
        p[t][j]='';
        *pval = t;
        return;
    }
     
    void Show(char (*p)[10],int *pval)
    {
        int j=0;
        int k=0;
        while(k<=*pval)
        {
            printf("a[%d]==",j);
            for(int i=0; p[k][i]!=''; i++)
            {
                printf("%c",p[k][i]);
            }
            putchar(10);
            k++;
            j++;
        }
        return;
    }
     
    int main()
    {
        int val=NULL;
        char a[10][10];
        char b[]="How are you";
        printf("b:%s
    -------------
    ",b);
        char (*p)[10];
        p = a;
        Func(p,b,&val);
        Show(p,&val);
        system("pause");
        return 0;
    }
    

    得到结果:
    image

    【2】

    原题目地址:
    https://zhidao.baidu.com/question/712193735370778525.html?entry=qb_uhome_tag

    题目:编写字符串插入函数String_Insert,将字符串sub插入到字符串str中,插入位置为pos(从0开始)。
    1.编写字符串插入函数String_Insert,将字符串sub插入到字符串str中,插入位置为pos(从0开始)。假设分配给str的内存空间长度足够。
    2.上一题,设分配给字符串str的空间有限,为size(字节数,结尾的0字符也算在内),插入后有可能超出,重写该函数,保证不发生非法内存访问。

    答:

    【1】

    
    #include<stdio.h>
    #include <windows.h>
     
    void String_Insert(char sub[],char str[],int pos)
    {
        int i,j=0;
        int sub_size=strlen(sub);
        int str_size=strlen(str);
        for(i=str_size-1; i>=pos-1; i--)
        {
            str[i+sub_size]=str[i];
        }
        str[str_size+sub_size]='';
        for(i=pos-1; i<pos-1+sub_size; i++,j++)
        {
            str[i]=sub[j];
        }
        return;
    }
     
    int main()
    {
        char sub[10];
        char str[30];
        int pos;
        printf("输入sub字符串:");
        gets(sub);
        printf("输入str字符串:");
        gets(str);
        printf("输入插入位置:");
        scanf("%d",&pos);
        String_Insert(sub,str,pos);
        printf("str:");
        puts(str);
        putchar(10);
        system("pause");
        return 0;
    }
    

    【2】

    
     
    #include<stdio.h>
    #include <windows.h>
     
    void String_Insert(char sub[],char str[],int pos,int size)
    {
        int i,j=0;
        int sub_size=strlen(sub);
        int str_size=strlen(str);
        int t=sub_size+str_size+1;
        int k;
        if(t<=size)
        {
            for(i=str_size-1; i>=pos-1; i--)
            {
                str[i+sub_size]=str[i];
            }
            str[str_size+sub_size]='';
            for(i=pos-1; i<pos-1+sub_size; i++,j++)
            {
                str[i]=sub[j];
            }
        }
        else
        {
            k=t-size;
            for(i=str_size-1-k; i>=pos-1; i--)
            {
                str[i+sub_size]=str[i];
            }
             
            for(i=pos-1; ((i<pos-1+sub_size)&&(i<size)); i++,j++)
            {
                str[i]=sub[j];
            }
            str[size-1]='';
        }
        return;
    }
     
    int main()
    {
        char sub[10];
        char str[10];
        int size = sizeof(str);
        int pos;
        printf("输入sub字符串:");
        gets(sub);
        printf("输入str字符串:");
        gets(str);
        printf("输入插入位置:");
        scanf("%d",&pos);
        String_Insert(sub,str,pos+1,size);
        printf("str:");
        puts(str);
        putchar(10);
        system("pause");
        return 0;
    }
    

    上机测试:
    【1】
    image

    【2】
    image

    【3】

    原题目地址:https://zhidao.baidu.com/question/1495131980697139059.html?entry=qb_uhome_tag

    题目:c语言求1到100以内所有只有2,5,7,11四个素数因子的数,并输出这些数的所有因子

    答:

    #include <stdio.h>
    #include <windows.h>
     
    bool Func2(int a)            //判断是否满足要求(因子只有2,5,7,11)
    {
        int j,t=0;
        for(j=2; j<a; j++)
        {
            if(0==(a%j))
            {
                if((2==j)||(5==j)||(7==j)||(11==j))
                {
                    t++;        //有几个因子
                    continue;
                }
                else
                    return false;
            }
        }
     
        if(0==t)                        //如果没有因子,也就是素数,则返回false
            return false;
        if(0!=t)                        //满足要求,返回true
            return true;
    }
     
    void Func(int min,int max)
    {
        int i,j;
        for(i=min; i<=max; i++)
        {
            if(Func2(i))                    //判断是否符合要求
            {
                printf("[%d]:",i);        //输出满足的数
                for(j=2; j<i; j++)
                {
                    if(0==(i%j))
                    {
                        printf("%d ",j);        //输出各因子
                    }
                }
                putchar(10);                //输出【回车】(换行)
            }
                 
        }
        return;
    }
     
    int main()
    {
        Func(1,100);
     
        system("pause");
        return 0; 
    }
     
    
    

    【注意】:这道题目隐含一个说明吧(至少我是这么理解的)-- 1作为所有数的因子,应该也包括在条件之内!(也就是1,2,5,7,11 5个因子数满足条件),所有我在这把【j】变量从2开始算了。

  • 相关阅读:
    OpenCV笔记——cvFloodFill漫水填充算法
    C# 总结 随笔
    MYSQL存储过程 随笔
    MYSQL总结 随笔
    xPath 总结 随笔
    Javascript 总结 随笔
    linux中top查看cpu使用率超过100%
    页面优化小记1
    基于数据库的多语言解决方案
    基于消息队列的日志组件
  • 原文地址:https://www.cnblogs.com/sharpeye/p/15353732.html
Copyright © 2011-2022 走看看