C语言笔试题(记录)


前言

记2023年8月25日20点00分于溢信科技公司面试题
岗位:C/C++开发工程师
同款题连接


一、求给定数组中出现频率最高的前n个数

参考的链接
思路:利用两个数组,a[i] b[i],前者a[i]保存数据,后者b[i]保存每个数据出现的次数;
找到出现次数最多的b[i],且记录下其下标i,从而找到最大次数对应的数字。

#include<stdio.h>
#define N1 1000
int b[N1] = {0};
int max;
int index = 0;
int i, j, n;
void TopN(int a[],int size,int N)
{
//用双循环拿a[i]元素和a数组的每一个数比较(包括a[i]本身)
    for (i = 0; i < size; i++) //记录每个数字出现的次数,每个数字至少出现一次,使用数组b[i]保存下来次数。
    {
        for (j = 0; j < size; j++)
        {
            if (a[i] == a[j])
            {
                b[i]++;//表示第i个元素出现的次数
            }
        }
    }
 
    for(int i=0;i<N;i++)//查找最大的次数,记住最大次数的下标,使用该下标找到出现次数最大的数字。
    {
     max = b[0];
    for (j =1; j < size; j++)
    {
        if (max < b[j])
        {
            max = b[j];
            index = j;
        }
    }
    printf("%d,%d\n",a[index], max);//输出出现最多的数和次数
    for(j=0;j<size;j++)
    {
        if(max==b[j])
        {
            b[j]=0;
        }
    }
    }
}
int main()
{
    // for (i = 0; i < n; i++)
    // {
    //     scanf("%d", &a[i]); 
    // }
    int a[N1]={10, 3, 2, -2, 5, 3, 4, 3, 0, 3, 2
};
    top(a,10,2);
    return 0;
}

二、字符串中获取最长无重复字符子串

参考:c语言 无重复字符的最长子串我只选了第一个解决方法:哈希和滑动数组
代码如下(示例):

int FindSub(char * s)
{
    int count = 0;
    int p = 0,q = 0;
    int hash[256] = {0};
    int len = strlen(s);
    while(p<len)
        {
            if(hash[s[p]]!= 0 && hash[s[p]]>q)                
                {
                    q = hash[s[p]];
                    hash[s[p]] = p+1;
 
                }
            else 
                {
                    hash[s[p]] = p+1;
                }
                count = fmax(count,p-q+1);
                p++;
 
        }
return count;
}

三、100只骆驼,100筐土豆,大骆驼背3筐,中骆驼背2筐,2只小骆驼背一筐,问有多少种组合,写思路?

自己做了一半,卡在了公倍数上。参考了百度文库在这里插入图片描述


总结

网上有很多对于试题的解决案例,关键是找到一个符合你思维方式的解决办法,思维可以一样,但答案可能会各有不同。
(声明以上试题均非源试题,仅供个人纪录和大家参考)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SingsonLu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值