东信北邮笔试-211009

在前程无忧上投的,我自己都不清楚是社招还是校招,此时尬住.jpg
主要还是写题吧!题目分为客观题和编程题,只能记住一部分了

  • 客观题
  1. 某村每户人家都养一只牛,某日防疫站工作人员来该村说村里有病牛。但是检查病牛不能看自己家的牛,只能通过看其他人家的牛来判断自己的牛是否生病,第一天没人杀牛,第二天还是没人杀牛,第三天有人杀牛了。请问村里有几只病牛?(个人补充题干:每人每个白天都可以查看其他所有人的牛的情况,晚上的时候进行杀牛这个行动)
    【答案】3头
    【解析】
    (1)如果病牛有1头,那么病牛的主人检查其他所有人的牛都是正常的,那他就可以推出自己的牛是病牛。那么第一天晚上就杀牛了。<不符题意>
    (2)如果病牛有2头,那么在两家病牛的主人的视角:“我发现村里的1只病牛,所以我并不能确定自己的牛是否正常”,因此第一晚没有人杀牛。等到第二天发现所有人都没有杀牛,病牛的主人视角:“我发现有1只病牛,他的主人第一晚没有杀,说明他昨天也检查出来了1只病牛,而这只病牛就是我家的牛”。于是第二天晚上就会有人杀牛。<不符题意>
    (3)如果病牛有3头,那么在三家病牛的主人的视角:“我发现村里的2只病牛,所以我并不能确定自己的牛是否正常”,那么现在任一牛主人做推理:“我假设我的牛是正常的,那么这两家病牛的主人应该在第二天晚上就杀牛了,这不符合第三天的情况。所以这两家的主人应该和我一样,都发现了2头病牛,而自己家的牛也是病牛”。因此第三天晚上牛主人就会杀牛。

  2. 一块不均匀的主板,从头烧到尾要2个小时,最少需要几块相同款型的主板,才能准确的衡量出2小时30分钟
    【答案】3块
    【解析】
    把板子编号A B C
    拿A,从两端同时开始烧,花费1小时
    等A烧完,拿B和C,B从两端同时开始烧,C从一端开始烧。
    B烧完需花费1小时,B烧完时将C另一端点燃(两头烧),C烧完花费0.5小时
    因此1+1+0.5=2.5小时,三块板子就可以

  3. 时针和分针一昼夜重合多少次?
    【答案】22次
    【解析】一昼夜分针转24圈,时针转2圈,分针要超过时针22次

  4. (多选)甲乙两人捡到一个价值10元的购物卡。协商后打算通过这样的拍卖规则来确定归属:两人单独出价(可以出0元),出价高者得到购物卡,同时将与出价相同数量的钱给对方。如果两人出价相同,则通过掷硬币来决定购物卡的归属。例如:甲和乙都出价1元,他们通过掷硬币来决定购物卡的归属。此时,得到购物卡的人赚9元,另一人赚1元。两人都同意用手头的现金来进行出价。甲和乙都知道甲有6元、乙有8元,两人都期望自己尽可能多赚。那么()。
    A.乙最终赚的比甲多
    B.甲最终赚的比乙多
    C.甲乙两人中可能有一人会有损失
    D.甲乙两人赚的一样多
    【答案】ABD
    【解析】https://blog.csdn.net/hanchengxi/article/details/11800043

  5. 小明一共有红、绿、蓝三个盒子,其中只有一个盒子放着小明的洋娃娃。小明给出三个提示,其中只有一个提示是正确的;三个提示分别为:洋娃娃在红盒子里,洋娃娃在蓝盒子里,洋娃娃不在蓝盒子里。据此推断,洋娃娃放在()
    A.红盒子
    B.绿盒子
    C.蓝盒子
    D.不能确定
    【答案】D
    【解析】
    (1)若提示1正确,则条件组合为:{ 在红盒子 + 不在蓝盒子 +在蓝盒子} ,那么提示2 3互相矛盾<不符题意>
    (2)若提示2正确,则条件组合为:{ 不在红盒子 + 在蓝盒子 + 在蓝盒子},推导出娃娃在蓝盒子<符合题意>
    (3)若提示3正确,则条件组合为:{ 不在红盒子 + 不在蓝盒子 + 不在篮盒子},推导出娃娃在绿盒子<符合题意>
    因此娃娃在蓝盒子或者绿盒子中,选择“不能确定”

  6. 500张骨牌整齐地排成一行,按顺序编号为1、2、3、……、499、500。第一次拿走所有奇数位置上的骨牌,第二次再从剩余骨牌中拿走奇数位置上的骨牌,以此类推。请问最后剩下的一张骨牌的编号是?
    A.128
    B.250
    C.256
    D.500
    【答案】C
    【解析】
    第一次后剩下250个偶数:2,4,6,8…498,500(2的倍数留下,n×2^1)
    第二次后剩下125个偶数:4,8,12,16…496,500(4的倍数留下,n×2^2)
    第三次后剩下62个偶数:8,16,24…488,496(8的倍数留下,n×2^3)
    ……
    第八次后留下的1个偶数:256(2的八次方倍数留下)
    【解析2】
    列2^n <= 500 ,得n(max)=8

  7. 有3堆火柴,分别有4,5,7根,两个人依次取火柴,每次只能取同一堆的火柴,最少拿一根,最多拿着堆内所有火柴,取走最后一根火柴,让对方无火柴可以取者为胜。请问现在谁会获胜?()
    A.后手
    B.先手
    C.不确定
    【答案】B
    【解析】
    因为4 ^ 5 ^ 7 != 0(即100 ^ 101 ^ 111 != 0),所以先手有必胜的策略。题源为博弈论中的尼姆博弈,感兴趣的同学可以自行查看基础组合博弈
    具体过程如下(使用“先手方”、“后手方”代表两个人):
    (1)先手方先拿掉第三堆的6根,这时候变成了(4,5,1)
    (2)
    a. 此时如果后手方拿掉了1,那么就剩下(4,5)。 先手方就拿5里面的1根,保证剩下两堆的数量相等,堆变成(4,4)。此时不论后手方如何再拿,先手方都可以从另外一堆拿掉同样的根数,即始终保持两堆相等,直到出现堆为(1,1)的情况,此时先手方赢
    b. 如果后手方拿第一堆全部,堆变成(5,1)。先手方拿走其中一堆的一部分,保证出现(1,1)的情况,此时先手方赢。
    c. 如果后手方拿第二堆全部,同情况b
    d. 如果后手方拿第一堆的部分,则有三种拿法,拿1/2/3根。拿1根时,堆变成(3,5,1),先手方在第二堆里拿3根,将堆变成(3,2,1),此时先手方赢;拿2根时,堆变成(2,5,1),先手方在第二堆里拿2根,将堆变成(2,3,1),此时先手方赢;拿3根时,堆变成(1,5,1),先手方拿走第二堆全部,将堆变成(1,1),此时先手方赢;
    e.如果后手方拿第二堆的部分,拿1根时,堆变成(4,4,1),先手方拿走第三堆全部,将堆变成(4,4),此时先手方赢;其余同情况d
    综上,先手必胜

  8. 有一个天平和9个球,8个的重量一样,有一个与其他的重量不一致(并不知道重还是轻),求需要称多少次才能找到重量不一致的球?
    【答案】最少3次
    【解析】
    每3个球一组,分为ABC三组
    称AB
    (1)如果天平平衡,则AB均为标准球堆,特殊球在C中。取C中任意一个球和一个标准球进行比较,进行2次,即可判断出特殊球
    (2)如果天平不平衡,则C为标准球堆。称 C和其余任意一堆球,判断特殊球在哪一堆 和 特殊球相较于标准球的轻重。随后将特殊球堆任意两个球拿上天平,判断出特殊球

  9. 有四个小老鼠一块出去偷食物(它们都偷了食物了),回来时候族长问它们都偷了什么食物,老鼠A说:“我们每个老鼠都偷了奶酪.”老鼠B说:“我只偷了一颗樱桃.”老鼠C说:“我没有偷奶酪.”老鼠D说:“有些老鼠没有偷奶酪.”族长仔细观察了一下,发现它们当中只有一只老鼠说了实话,那么下列的结论正确的是()
    A.所有老鼠都偷了奶酪
    B.所有的老鼠都没有偷奶酪
    C.所有的老鼠都没有偷奶酪
    D.老鼠B只偷了一颗樱桃
    【答案】A
    【解析】
    假设A是真话,那么B,C,D是假话<成立>。
    假设B是真话,那么D是真话<不成立>。
    假设C是真话,那么D是真话<不成立>。
    假设D是真话,那么B是真话<不成立>。

  10. 某机器人可以说真话或者假话。某程序设定其周末(周六周日)说真话,周四说谎话,其他日期随机。某测试打算验证该功能。他连续七天,每天问机器人“你在哪里出生的?”,在前六天得到了这样的答案:阿里,淘宝,阿里,淘宝,天猫,淘宝。那么第七天,机器人的回答应该是()
    A. 阿里
    B… 淘宝
    C. 天猫
    D .阿里或淘宝
    E. 阿里或天猫
    F. 天猫或淘宝
    【答案】A
    【解析】
    因为答案中没有两个连续相同的,所以第一天只可能是周日或周一。
    假设第一天是周一,则 { 周六=淘宝 + 周四=淘宝 } 矛盾
    所以第一天是周日,则周六与周日相同 ,即阿里

  11. 一只木箱内有白色乒乓球和黄色乒乓球若干个。小明一次取出 5 个黄球、3 个白球,
    这样操作 N 次后,白球拿完了,黄球还剩 8 个;如果换一种取法:每次取出 7 个黄球、3
    个白球,这样操作 M 次后,黄球拿完了,白球还剩 24 个。问原木箱内共有乒乓球多少个?
    ( )
    A.246
    B.258
    C.264
    D.272
    【答案】C
    【解析】
    核心:等量关系
    设黄球x个,白球y个,则
    (x-8)/5 = N = y/3
    x/7 = M = (y-24)/3
    解得x=168,y=96

  • 编程题
  1. 判断给定的整数是否是回文数(负数绝对值是回文数 则认为该负数也是回文数)
#include <cstdio>

using namespace std;

int main(void) {
    int n;
    cin >> n;
    if ( n < 0 ) n = -n;
    int k = 0, t = n;
    while ( t ) {
        k = k * 10 + t % 10;
        t /= 10;
    }
    cout << ( k==n ? "Yes" : "No" ) << endl;
    return 0;
}

  1. 一个数在N(2 <= N <= 16)进制下是否有回文数
#include<stdio.h>
int fun(int n,int x)
{
	int len=0,j;
    int a[35];
	while(n)
	{
	   	a[len++]=n%x;
	   	n/=x;
	}	
	for(j=0;j<len/2;j++)
	{
		if(a[j]==a[len-1-j])
			continue;
		else
			return 0;
	}
	return 1;
}
int main()
{
	int n,f;
	while(scanf("%d",&n)!=EOF)
	{
		f=0;
		for(int i=2;i<=16;i++)
		{
			if(fun(n,i))
			{
			   printf("Yes\n");
			   f=1;
			   break;	
			}			
		}
		if(!f)
		   printf("No\n");
	}
	return 0;
}
  1. 字符串分割为回文串的最小分割次数
#include <iostream>
#include <string>
#include <vector> 
using namespace std;
 
int main() {
    string s;
    cin >> s;
    int len = s.size();
    vector<int> cnt(len);
    vector<vector<int>> ishw(len,vector<int>(len));
    //DP思想
    for (int i = 1; i < len; ++i) {
        cnt[i] = cnt[i-1] + 1;//先得到当前最坏情况
        for (int j = i; j >= 0; --j) {
            //i-j<2即i==j || i =j+1    否则;只需看外部最大串是不是回文串
            if (s[i] == s[j] && (i - j < 2 || ishw[j+1][i-1])) {
                ishw[j][i] = 1;
                
                //可能会更新切割次数
                //无论当前子串是不是回文串,都需要计算切割次数
                cnt[i] = min(j == 0 ? 0 : cnt[j-1] + 1, cnt[i]);//动态衡量
            }
        }
    }
    cout << cnt[len-1] << endl;
    return 0;
}

  1. 一个字符串以单向链表形式存储,判断是否是回文串(算法要求空间复杂度小)
/* 给定基础结构和初始链表,只需要写check函数 */
  1. 给定一个字符串,怎么添加字符使其变成回文串,参考xiaoxi666的文章
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

bool IsHuiWen(string str)
{
    string rstr=str;
    reverse(rstr.begin(),rstr.end());
    return str==rstr;
}

int main(){
    string str;
    while(cin>>str){
        bool flag=false;
        for(int i=0;i<(int)str.size();++i){
            if(IsHuiWen(str.substr(0,i)+str.substr(i+1,str.size()-1-i))){
                flag=true;
                break;
            }
        }
        cout<< ((flag==true) ? "YES" : "NO")<<endl;
    }
    return 0;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值