17校招真题题集(1)1-5

注:本系列题目全是按照通过率降序来排列的,基本保证题目难度递增。

 

1、

题目名称:游戏任务标记

来源:腾讯

题目描述

游戏里面有很多各式各样的任务,其中有一种任务玩家只能做一次,这类任务一共有1024个,任务ID范围[1,1024]。请用32个unsigned int类型来记录着1024个任务是否已经完成。初始状态都是未完成。 输入两个参数,都是任务ID,需要设置第一个ID的任务为已经完成;并检查第二个ID的任务是否已经完成。 输出一个参数,如果第二个ID的任务已经完成输出1,如果未完成输出0。如果第一或第二个ID不在[1,1024]范围,则输出-1。

输入描述:

输入包括一行,两个整数表示人物ID.

输出描述:

输出是否完成

示例1

输入

1024 1024

输出

1

分析:经过(艰难的)读题,分析出只有两个数相等,才输出1,否则第二个ID一定未完成,输出0,不在范围输出-1即可。

p=(input().split())
f,s=int(p[0]),int(p[1])
if f not in range(1,1025) or s not in range(1,1025):print(-1)
elif s==f:print(1)
else:print(0)

当然,这可能不是题目的本意,真的这么写可能会被打。

1024=32*32,因此可用32个整数表示1024位(因为每个整数32位)
因为任务ID范围是1~1024,所以减1转化为0~1023
然后任务ID除以32,商为存到哪个整数,余数为该整数对应位(置1即可)
注:除以32相当于直接右移5位,对32取余相当于"与31"(这个技巧只对2的次方数有效).

#include <iostream>
using namespace std;unsigned int arr[32];int main()
{int id1, id2;while(cin>>id1>>id2){if(!(id2>=1 && id2<=1024)){cout<<-1<<endl;continue;}arr[(id1-1)>>5] |= (1<<(id1&31));cout<<( (arr[(id2-1)>>5] & (1<<(id2&31))) != 0)<<endl;}return 0;
}

 

2、

题目名称:网络走法数目

来源:美团

题目描述

有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。

输入描述:

输入包括一行,逗号隔开的两个正整数x和y,取值范围[1,10]。

输出描述:

输出包括一行,为走法的数目。

示例1

输入

3 2

输出

10

分析:

函数f(a,b)代表走到坐标(a,b)的走法数目

#include<iostream>
using namespace std;
int step(int m,int n){if(m == 0 || n == 0)return 1;return step(m - 1,n) + step(m,n -1);
}
int main(){int x,y;cin >> x >> y;cout << step(x,y) <<endl;
}

最笨写法,太多的重复子问题计算

简单动态规划

用二维表记录下来结果,并加以利用。

压缩:我们发现,除了这个位置上本身的数,DP[i,j]只和DP表中左边和上边的值有关,所以可以生成长度为矩阵较小边长一维表,用两层循环。注意顺序,从左向右打表,只有这样,左边的那个元素才是被更新过的,才是本行的左边那个元素。

l=(input().split())
x,y=int(l[0])+1,int(l[1])+1
l=[0]*x
l[0]=1
for p in range(y):for i in range(1,x):l[i]+=l[i-1]
print(l[-1])

3、

题目名称:幸运数

来源:京东

题目描述

小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字x,小明同学定义出了两个函数f(x)和g(x)。 f(x)表示把x这个数用十进制写出后各个数位上的数字之和。如f(123)=1+2+3=6。 g(x)表示把x这个数用二进制写出后各个数位上的数字之和。如123的二进制表示为1111011,那么,g(123)=1+1+1+1+0+1+1=6。 小明同学发现对于一些正整数x满足f(x)=g(x),他把这种数称为幸运数,现在他想知道,大于0且小于等于n的幸运数有多少个?

输入描述:

每组数据输入一个数n(n<=100000)

输出描述:

每组数据输出一行,小于等于n的幸运数个数。

示例1

输入

21

输出

3

分析:思想确实不难,按照题目意思走就可以了。实现稍微考察了coding能力吧,就要多练。

给出各种语言的实现:

python:

def f1(n):ret,t=0,nwhile 1:ret+= t%2t=t//2if t==0:breakreturn ret
def f2(n):q=0for i in str(n):q+=int(i)return q
r=int(input())
k=0
for i in range(1,r+1):if f1(i)==f2(i):k+=1
print(k)

java:

package 幸运数;
import java.util.*;
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNext()) {int n = in.nextInt();int count = 0;for (int i = 1; i <= n; i++) {if (f(i) == g(i)) {count++;}}System.out.println(count);}}/** 二进制 */private static int g(int n) {int sum = 0;while (n != 0) {sum += n % 2;n /= 2;}return sum;}/** 十进制 */private static int f(int n) {int sum = 0;while (n != 0) {sum += n % 10;n /= 10;}return sum;}
}

c++:

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<stdlib.h>
#define N 30;
using namespace std;
int f(int i)
{int sum = 0;while(i){sum+=i%10;i/=10;}return sum;
}
int g(int i)
{int sum = 0;for(int j = 1;j<100000;j*=2){if((j&i)==j) sum++;}return sum;
}
int main()
{//cout<<f(123)<<endl;cout<<g(123)<<endl;int n;while(cin>>n){int sum = 0;for(int i = 1;i<=n;i++){if(f(i)==g(i)) {sum++;}}cout<<sum<<endl;}return 0;
}

4、

题目名称:解救小易

来源:网易

题目描述

有一片1000*1000的草地,小易初始站在(1,1)(最左上角的位置)。小易在每一秒会横向或者纵向移动到相邻的草地上吃草(小易不会走出边界)。大反派超超想去捕捉可爱的小易,他手里有n个陷阱。第i个陷阱被安置在横坐标为xi ,纵坐标为yi 的位置上,小易一旦走入一个陷阱,将会被超超捕捉。你为了去解救小易,需要知道小易最少多少秒可能会走入一个陷阱,从而提前解救小易。

输入描述:

第一行为一个整数n(n ≤ 1000),表示超超一共拥有n个陷阱。
第二行有n个整数xi,表示第i个陷阱的横坐标
第三行有n个整数yi,表示第i个陷阱的纵坐标
保证坐标都在草地范围内。

输出描述:

输出一个整数,表示小易最少可能多少秒就落入超超的陷阱

示例1

输入

3
4 6 8
1 2 1

输出

3

分析:从[1,1]走到[X,Y]需要(X-1)+(Y-1)步这样对每个陷阱计算一下从[1,1]到陷阱所用的步数,求最小值即可。

n=int(input())
//保存横纵坐标
x=[int(x) for x in input().split()]
y=[int(x) for x in input().split()]
s=x[0]-y[0]-2//保存值
for i in range(n):s=min(x[i]+y[i]-2,s)
print(s)

5、

题目名称:身份证分组

来源:去哪网

题目描述

18位身份证的编码规则是:
前1、2位数字表示:所在省(直辖市、自治区)的代码
第3、4位数字表示:所在地级市(自治州)的代码
第5、6位数字表示:所在区(县、自治县、县级市)的代码;
第7—14位数字表示:出生年、月、日;
第15、16位数字表示:所在地的派出所的代码;
第17位数字表示性别:奇数表示男性,偶数表示女性;
第18位数字是校检码,用来检验身份证的正确性。
用户在输入身份证的过程中经常会输入错误,为了方便用户正确输入需要在输入过程中对用户的输入按照 6+8+4 的格式进行分组,实现一个方法接收输入过程中的身份证号,返回分组后的字符

输入描述:

输入数据有多行,每一行是一个输入过程中的身份证号

输出描述:

分组后的字符串

示例1

输入

5021
502104 198803
5021041988033084
502104198803308324

输出

5021
502104 198803
502104 19880330 84
502104 19880330 8324

 

分析:就是判断一下字符串长度的情况

s=input().replace(' ','')
if len(s)<=6:print(s)
elif len(s)<=14:print(s[0:6]+' '+s[6:])
else:print(s[0:6]+' '+s[6:14]+' '+s[14:])

有些同学没学python,找了个别人的c++,自己看吧

#include <iostream>
#include <string>
using namespace std;//按顺序输出字符串,跳过空格
//重新确定空格的位置,输出时对非空格字符计数,6及18时输出一个空格
//注意一种特殊清空,字符串就6个,那么计数为6时不加空格
int main(){string s;while(getline(cin,s)){int cnt=0;for(int i=0;i<s.size();++i){if(s[i]!=' '){++cnt;cout<<s[i];if(i==s.size()-1) break;if(cnt==6||cnt==14) cout<<" ";}}cout<<endl;}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《游戏编程入门 4th》笔记(2 / 14):监听Windows消息

文章目录编写一个Windows程序理解InitInstanceInitInstance函数调用InitInstance的结构理解MyRegisterClassMyRegisterClass函数调用MyRegisterClass的作用揭露WinProc的秘密WinProc函数调用WinProc的大秘密什么是游戏循环The Old WinMain对持续性的需要实时终止器WinMain和循环…

17校招真题题集(2)6-10

注&#xff1a;本系列题目全是按照通过率降序来排列的&#xff0c;基本保证题目难度递增。 6、 题目名称&#xff1a;Fibonacci数列 来源&#xff1a;网易 题目描述 Fibonacci数列是这样定义的&#xff1a; F[0] 0 F[1] 1 for each i ≥ 2: F[i] F[i-1] F[i-2] 因此&am…

QT5的数据库

#include <QtSql> QT sql QSqlDatabase类实现了数据库连接的操作 QSqlQuery类执行SQL语句 QSqlRecord类封装数据库所有记录 QSqlDatabase类 [cpp] view plaincopy print?QSqlDatabase db QSqlDatabase::addDatabase("QOCI"); db.setHostName("localh…

数据结构课上笔记6

本节课介绍了单链表的操作实现细节&#xff0c;介绍了静态链表。 链表带头的作用&#xff1a;对链表进行操作时&#xff0c;可以对空表、非空表的情况以及 对首元结点进行统一处理&#xff0c;编程更方便。 下面给出带头的单链表实现思路&#xff1a; 按下标查找&#xff1a; …

《Unity2018入门与实战》笔记(9 / 9):个人总结

个人总结 脚本语言学习的窍门 尽可能多读、多写、多说脚本语言&#xff01; Link 游戏制作步骤 设计游戏时一般会遵循5个步骤&#xff1a; 罗列出画面上所有的对象。确定游戏对象运行需要哪些控制器脚本。确定自动生成游戏对象需要哪些生成器脚本。准备好用于更新UI的调度…

17校招真题题集(3)11-15

注&#xff1a;本系列题目全是按照通过率降序来排列的&#xff0c;基本保证题目难度递增。 11、 题目名称&#xff1a;买苹果 来源&#xff1a;网易 题目描述 小易去附近的商店买苹果&#xff0c;奸诈的商贩使用了捆绑交易&#xff0c;只提供6个每袋和8个每袋的包装(包装不…

Qt学习:QDomDocument

QDomDocument类代表了一个XML文件 QDomDocument类代表整个的XML文件。概念上讲&#xff1a;它是文档树的根节点&#xff0c;并提供了文档数据的基本访问方法。由于元素、文本节点、注释、指令执行等等不可能脱离一个文档的上下文&#xff0c;所以文档类也包含了需要用来创建这些…

《事实:用数据思考,避免情绪化决策》笔记

文章目录一分为二负面思维直线思维恐惧本能规模错觉以偏概全命中注定单一视角归咎他人情急生乱一分为二 要做到实事求是&#xff0c; 就要做到当你听到一分为二的说法时&#xff0c; 你就能迅速认识到这种说法描述的是一种两极分化的图画&#xff0c; 而两极之间存在一道巨大的…

顺序存储线性表实现

在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。 顺序存储结构的主要优点是节省存储空间&#xff0c;因为分配给数据的存储单元全用存放结点的数据&#xff08;不考虑c/c语言中数组需指定大小的情况&#xff09;&#xff0c;结点之…

QT5生成.exe文件时,出现缺少QT5core.dll文件解决方法

在 http://qt-project.org/downloads 下载Qt SDK安装需要Qt版本。在QtCreator下&#xff0c;程序可以正常运行&#xff0c;但是当关闭QtCreator后&#xff0c;在DeBug目录下再运行相应的*.exe程序时&#xff0c;会提示缺少Qt5Core.dll错误。解决方法&#xff1a;添加电脑环境变…

《基于Java实现的遗传算法》笔记(7 / 7):个人总结

文章目录为何采用遗传算法哪些问题适合用遗传算法解决遗传算法基本术语一般遗传算法的过程基本遗传算法的伪代码为何采用遗传算法 遗传算法是机器学习的子集。在实践中&#xff0c;遗传算法通常不是用来解决单一的、特定问题的最好算法。对任何一个问题&#xff0c;几乎总有更…

单链表不带头标准c语言实现

链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点&#xff08;链表中每一个元素称为结点&#xff09;组成&#xff0c;结点可以在运行时动态生成。每个结点包括两个部分&#xff1a;一个是…

Java设计模式(4 / 23):单例模式

文章目录单例模式的应用场景饿汉式单例模式懒汉式单例模式改进&#xff1a;synchronized改进&#xff1a;双重检查锁改进&#xff1a;静态内部类破坏单例用反射破坏单例用序列化破坏单例解密注册式单例模式枚举式单例模式解密容器式单例线程单例实现ThreadLocal单例模式小结参考…

约瑟夫环-(数组、循环链表、数学)

约瑟夫环&#xff08;约瑟夫问题&#xff09;是一个数学的应用问题&#xff1a;已知n个人&#xff08;以编号1&#xff0c;2&#xff0c;3...n分别表示&#xff09;围坐在一张圆桌周围。从编号为k的人开始报数&#xff0c;数到m的那个人出列&#xff1b;他的下一个人又从1开始报…

Ubuntu麒麟下搭建FTP服务

一.怎么搭建FTP服务&#xff1a; 第一步>>更新库 linuxidclinuxidc:~$ sudo apt-get update 第二步>>采用如下命令安装VSFTPD的包 linuxidclinuxidc:~$ sudo apt-get install vsftpd 第三步>>安装完成后打开 /etc/vsftpd.conf 文件&#xff0c;按如下所述…

《数据结构上机实验(C语言实现)》笔记(1 / 12):绪论

文章目录验证性实验求1~n的连续整数和说明放码结果常见算法时间函数的增长趋势分析说明放码结果设计性实验求素数个数说明放码结果求连续整数阶乘的和说明放码结果验证性实验 求1~n的连续整数和 说明 对于给定的正整数n&#xff0c;求12…n12…n12…n&#xff0c;采用逐个累…

线性表实现一元多项式操作

数组存放&#xff1a; 不需要记录幂&#xff0c;下标就是。 比如1&#xff0c;2&#xff0c;3&#xff0c;5表示12x3x^25x^3 有了思路&#xff0c;我们很容易定义结构 typedef struct node{float * coef;//系数数组int maxSize;//最大容量int order;//最高阶数 }Polynomial…

ubuntu下解压缩zip,tar,tar.gz和tar.bz2文件

在Linux下面如何去压缩文件或者目录呢&#xff1f; 在这里我们将学习zip, tar, tar.gz和tar.bz2等压缩格式的基本用法。 首先了解下Linux里面常用的压缩格式。 在我们探究这些用法之前&#xff0c;我想先跟大家分享一下使用不同压缩格式的经验。当然&#xff0c;我这里讲到的只…

《数据结构上机实验(C语言实现)》笔记(2 / 12):线性表

文章目录验证性实验实现顺序表各种基本运算的算法放码sqlist.hsqlist.cppexp2-1.cpp结果实现单链表各种基本运算的算法放码linklist.hlinklist.cppexp2-2.cpp结果实现双链表各种基本运算的算法放码dlinklist.hdlinklist.cppexp2-3.cpp结果实现循环单链表各种基本运算的算法放码…

链表排序-归并

链表排序&#xff0c;可以插入排序&#xff0c;我就不写了。 实现归并排序 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&…