复试机试笔试前最后补漏——字符串、递归、不太熟练的题

本文展示了C语言中的六个编程示例,涉及回文串计数、翻牌操作、对称二叉树判断、最大和连续子数组和卡布列卡猜想,以及二分法求解区间中点,体现了基本的IT技术与算法实现。
摘要由CSDN通过智能技术生成

1.统计出现的回文串个数

#include <stdio.h>
#include <stdlib.h>
int judge(char *str,int start,int end)
{
    while(start<=end)
    {
        if(str[start]!=str[end])
        {
            return 0;
        }
        start++;
        end--;
    }
    return 1;
}
int main() {
    char s[100];
    gets(s);
    int i=0;
    int count=0;
    while(s[i]!='\0')
    {
        int j=i;
        while(s[j]!='\0'){
            if(judge(s,i,j))
                count++;
            j++;
        }
        i++;
    }
    printf("%d",count);
    return 0;
}

2.翻牌

#include <stdio.h>
#include <stdlib.h>
void reverse(int visited[],int n,int index)
{
    if(visited[n]==1)
        return ;
    for(int i=1;i<=n;i++)
        if(i%index==0)
            visited[i]==1;
    reverse(visited,n,index+1);
}
void fun(int n)
{
    int *visited=malloc(sizeof(int)*(n+1));
    for(int i=1;i<=n;i++)
        visited[i]=0;
    reverse(visited,n,2);
    int num=0;
    for(int i=1;i<=n;i++)
        if(visited[i]==0)
        {
            printf("%d为正面",i);
            num++;
        }
    printf("%d",num);
}
int main()
{
    fun(100);
}

3.判断对称二叉树

bool judge(LNode *p,LNode *q)
{
    if(p==NULL&&q==NULL)
        return true;
    else if(p==NULL||q==NULL)
        return false;
    else if(p->val!=q->val)
        return false;
    else 
        return judge(p->left,q->right)&&judge(p->right,q->left);
}
入口:judge(root->left,root->right);

4.最大和连续子数组

void getMax(int a[],int n)
{
    int pre=0,max=a[0];
    int start=0,end=0,temps=0,len;
    for(int i=0;i<n;i++)
    {
        if(pre+a[i]<a[i])
        {
            pre=a[i];
            temps=i;
        }
        else{
            pre=pre+a[i];
        }
        if(pre>max)
        {
            max=pre;
            start=temps;
            end=i;
        }
    }
    len=end-start+1;
    int res[len];
    for(int i=0;i<len;i++)
        res[i]=a[start+i];
}

5.卡布列卡猜想

#include <stdio.h>
#include <stdlib.h>
int ktoFour(int n)
{
    while(n<1000)
    {
        n*=10;
    }
    return n;
}
int count(int n)
{
    int a[4];
    for(int i=0;i<4;i++)
    {
        a[i]=n%10;
        n=n/10;
    }
    for(int i=0;i<4;i++)
        for(int j=0;j<4-i-1;j++)
            if(a[j]>a[j+1])
            {
                int temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
    int max=a[3]*1000+a[2]*100+a[1]*10+a[0];
    int min=a[0]*1000+a[1]*100+a[2]*10+a[3];
    int dub=max-min;
    if(dub<1000)
        return ktoFour(dub);
    else
        return dub;
}
int main()
{
    int n;
    scanf("%d",&n);
    int step=0;
    while(n!=6174)
    {
        n=count(n);
        printf("%d",n);
        step++;
    }
    printf("step=%d",step);
}

6.二分法求区间中点

double eps=1e-4;
double func(double x)
{
    return x*x*x-x*x-1;
}
double solution(double left,double right)
{
    double mid;
    while(right-left>eps)
    {
        mid=(left+right)/2;
        if(func(mid)>0)
            right=mid;
        else
            left=mid;
    }
    return mid;
}

越做感觉脑子越空,算了,老老实实看自己笔记本了

希望幸运女神借我后天大后天两天光明~~~~~~~~~~~~~~~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值