网易实习--编程题

2024-06-22 22:48
文章标签 编程 实习 网易

本文主要是介绍网易实习--编程题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


网游中,装备强化是提升角色战力的常见方法。 现在你参与开发的游戏中也有这项功能,团队正在设计每件装备强化所能提升的战力及需要消耗的金币数。为了设计出一个合理的强化系统,决定先做一些强化模拟测试,而你现在就在是该模拟程序的开发者。 假设现在有n件可以同时穿戴的装备,对于第i件装备,最多可以强化mi 次,对于第i件装备的第j次强化,会增加fij 的战力,并需要消耗gij 个金币。现在给出所有装备的数据,以及初始拥有的金币数量,求最多可以增加多少战力。
输入描述:
输入文件的第一行为一个正整数T,表示测试数据组数。
接下来有T组数据。每组数据第1行为两个整数n和s,分别表示装备数量及初始拥有的金币数量。接下来是n行,每行表示一个装备,其中每行第一项为一个字符串,表示装备的名称,第二项为非负整数mi,表示装备最多可强化的次数,接下来为2*mi个非负整数,表示每次强化会增加的战力及消耗的金币数。

数据范围:
对于所有数据文件,1<=T<=10。装备的名称最大长度不超过32个字符,由大小写字母或数字组成。每件装备最多强化次数mi满足0<=mi<=3。所有战力数值和金币数为非负整数且不超过10,000,000。
对于其中的20%数据,满足装备数1<=n<=5;
另外有30%数据,满足装备数1<=n<=10;
另外有30%数据,满足装备数1<=n<=16;
最后剩下的20%数据,满足装备数1<=n<=20。

数据保证只有唯一的强化方案能达到最大战力。


输出描述:
对于每个测试数据,第一行为一个整数,表示最多可提升的战力。接下来是n行,表示达到这个战力时每件装备分别的强化次数,形式为“装备名称+强化次数”。输出装备的顺序要与输入数据一致。更详细的格式请参照输出样例。

输入例子:
3
4 100
Helm 1 20 30
Gloves 1 30 40
Boots 1 10 10
Sword 1 50 50
5 10
Item1 0
Item2 1 10000 100
Item3 1 10 10
Item4 3 1 0 2 1 3 2
Item5 3 0 4 1 1 5 1
6 256
1x 2 12 43 35 58
2x 2 34 54 88 31
3x 2 43 10 15 55
4x 2 32 54 19 19
5x 2 84 1 15 45
6x 2 19 40 99 12

输出例子:
90
Helm+0
Gloves+1
Boots+1
Sword+1
12
Item1+0
Item2+0
Item3+0
Item4+3
Item5+3
418
1x+0
2x+2
3x+1
4x+2
5x+1
6x+2








NTES是网易在纳斯达克股票市场的代号,在财报公布后,NTES的股价接连大涨,创下了历史新高。 下面,我们用四个5x7的点阵来描述NTES这代号。
##....#
#.#...#
#..#..#
#...#.#
#....##

#######
...#...
...#...
...#...
...#...

#######
#......
#######
#......
#######

#######
#......
#######
......#
#######
假设我们认为每个点的周围的8个方向的点都和它是相连的,并且相连在一起的符号“#”我们可以认为在同一个联通分量,则上述四个点阵分别都包含了一个“#”的联通分量。

给定N * M的点阵,点阵只包含“.”和“#”两种符号。在点阵中可能包含了很多的联通分量。那么,在这点阵当中,你能找到多少个和标准的“N”,“T”,“E”,“S”一样的联通分量呢?
下面是点阵中NTES对应的联通分量的一些限制:
❖ N、T、E、S可能被顺时针旋转90度、180度或270度。例如以下的7x11的点阵中,包含了两个完整的T(两个联通分量),一个与前文提到的T方向一致,另一个是顺时针旋转了270度。
#...#######
#......#...
#......#...
#####..#...
#......#...
#..........
#..........
❖ 对于任何一个完整的N、T、E、S对应的联通分量,必须和前面给出的标准的模板一致。即除了旋转外,不多出或者缺少任何一个“#”,否则认为不匹配。例如下图中虽然只包含了一个联通分量(根据八方向相连的定义,(1,7)和(0,6)上的“#”相连),但是其多了一个“#”在位置(1,7),因此,以下点阵中没有任何一个NTES对应的联通分量。
#######.
...#...#
...#....
...#....
...#....

输入描述:
每个输入数据包含一个测试点。
第一行为点阵的大小N,M。其中1<=N<=500,1<=M<=500。
接下来N行,每行包含了M个“.”或“#”的字符,描述了给定的点阵。


输出描述:
输出包括四行,按顺序输出点阵中包含的NTES的数量。

输入例子:
输入样例1:
7 11
#...#######
#......#...
#......#...
#####..#...
#......#...
#..........
#..........


输入样例2:
12 23
#######....#....#######
...#...##....#..#......
#..#...#.#...#..#######
#..#...#..#..#........#
#...#..#...#.#..#######
###....#....##.........
.........#.............
#######....#.##.##....#
......#....#....#.#...#
#######....#....#..#..#
......#....#....#...#.#
#######.#######.#....##

输出例子:
输出样例1:
N: 0
T: 2
E: 0
S: 0


输出样例2:
N: 1
T: 1
E: 1
S: 1







小Q是名小学生,他最喜欢数学中的加法竖式填空了。例如下面的填空题,每个空格表示1…9中的一个数字。

有时候这种竖式题不一定只有唯一解,小Q很想知道,给定一个这样的竖式,总共可能的解有多少个。
被加数和加数的位数不会超过3位。和的位数不会超过4位。空格只可能存在于被加数和加数中。

输入描述:
每个输入数据包含多个测试点。
第一行为测试点的个数T(T<=30)。
每个测试点包含一行,包含了三个长度大于0的字符串,分别表示被加数,加数和结果。每个字符串之间有一个空格。每个字符串只会包含“X”和“1”…“9”,其中“X”表示竖式中的空格。保证竖式至少有一个解。


输出描述:
对于每个测试点,输出一行,表示一共可能的解的个数。

输入例子:
2
X7 9X 123
X X 4

输出例子:
1
3

(样例解释:样例1的解为27+96,样例2的解为1+3,2+2,3+1。)

#include <iostream>
#include <cstring>
using namespace std;
int N ;
int V ;
char name[30][100];
int Weight[30][10];
int Value[30][10] ;
int Num[30] ;
int f[30][1000000];
int PA[30][1000000];int main()
{int case_num;cin>>case_num;for(int nn=0; nn<case_num; nn++){memset(f,0,sizeof(f));memset(PA,-1,sizeof(PA));cin>>N>>V;for(int i=1; i<=N; i++){cin>>name[i]>>Num[i];for(int j=0; j<Num[i]; j++)cin>>Value[i][j]>>Weight[i][j];}int nCount = 0;for (int i = 0; i <= N; i++){f[i][0] = 0;}for (int v = 0; v <= V; v++){f[0][v] = 0;}for (int i = 1; i <= N; i++){for (int v = Weight[i][0]; v <= V; v++){f[i][v] = 0;int temp_v=v;int num_weight=0;for(num_weight=0; num_weight<Num[i]; num_weight++){temp_v-=Weight[i][num_weight];if(temp_v<0)break;}nCount = min(Num[i],num_weight);PA[i][v]=0;for (int k = 0; k <= nCount; k++){int flag=0;if(k==0){if(f[i][v]<f[i - 1][v ])flag=1;f[i][v] = max(f[i][v],f[i - 1][v ]);if(flag==1)PA[i][v]=0;}else if(k==1){if(f[i][v]<f[i - 1][v -Weight[i][0]] +  Value[i][0])flag=1;f[i][v] = max(f[i][v],f[i - 1][v -Weight[i][0]] +  Value[i][0]);if(flag==1)PA[i][v]=1;}else if(k==2){if(f[i][v]<f[i - 1][v -Weight[i][0]-Weight[i][1]] +  Value[i][0]+  Value[i][1])flag=1;f[i][v] = max(f[i][v],f[i - 1][v -Weight[i][0]-Weight[i][1]] +  Value[i][0]+  Value[i][1]);if(flag==1)PA[i][v]=2;}else if(k==3){if(f[i][v]<f[i - 1][v -Weight[i][0]-Weight[i][1]-Weight[i][2]] +  Value[i][0]+  Value[i][1]+  Value[i][2])flag=1;f[i][v] = max(f[i][v],f[i - 1][v -Weight[i][0]-Weight[i][1]-Weight[i][2]] +  Value[i][0]+  Value[i][1]+  Value[i][2]);if(flag==1)PA[i][v]=3;}}}}int path[30]={0};cout<<f[N][V]<<endl;int V_t=V;for(int i =N ; i >= 1&&V_t>=0 ; i --){if(PA[i][V_t]== 0){path[i] = 0;}else if(PA[i][V_t]== 1){V_t -= Weight[i][0];path[i] = 1;}else if(PA[i][V_t]== 2){V_t -= Weight[i][1];path[i] = 2;}else if(PA[i][V_t]== 3){V_t -= Weight[i][2];path[i] = 3;}}for(int p=1; p<=N; p++)cout<<name[p]<<"+"<<path[p]<<endl;}return 0;
}



#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int dir[8][2]= {-1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,1,1};
char a[510][510];
int b[510][510]= {0};
int n,s;
int num=0;
int record_xy[510*510][4];//xmin,ymin,xmax,ymax
int record_num[510*510]= {0};
void bfs(int i,int j)
{int i_n,j_n;b[i][j]=num;record_num[num]++;if(record_xy[num][0]>i){record_xy[num][0]=i;}if(record_xy[num][1]>j){record_xy[num][1]=j;}if(record_xy[num][2]<i){record_xy[num][2]=i;}if(record_xy[num][3]<j){record_xy[num][3]=j;}for(int m=0; m<8; m++){i_n=i+dir[m][0];j_n=j+dir[m][1];if(i_n>=0&&i_n<n&&j_n>=0&&j_n<s){if(a[i_n][j_n]=='#'&&b[i_n][j_n]==0){bfs(i_n,j_n);}}}}
int main()
{//cout << "Hello world!" << endl;while(cin>>n>>s){int i,j;num=0;memset(b,0,sizeof(b));memset(record_num,0,sizeof(record_num));for(i=0; i<n; i++)for(j=0; j<s; j++){cin>>a[i][j];}for(i=0; i<n; i++)for(j=0; j<s; j++){if(a[i][j]=='#'&&b[i][j]==0){num++;record_xy[num][0]=510;record_xy[num][1]=510;record_xy[num][2]=-1;record_xy[num][3]=-1;bfs(i,j);}}int xmin,ymin,xmax,ymax;int N=0;int T=0;int E=0;int S=0;for(i=1; i<=num; i++){xmin=record_xy[i][0];ymin=record_xy[i][1];xmax=record_xy[i][2];ymax=record_xy[i][3];int p,q;int N_temp=0;int T_temp=0;int E_temp=0;int S_temp=0;if(xmax-xmin+1>=2&&ymax-ymin+1>=2){Nif(record_num[i]==(ymax-ymin+1)+(xmax-xmin+1)*2-2){if(ymax-ymin+1<3){}else{int xx=1;for(p=xmin; p<=xmax; p++){if(b[p][ymin]!=i||b[p][ymax]!=i||b[p][ymin+xx++]!=i){break;}}if(p==xmax+1){N_temp=1;N++;}}}if(N_temp==0&&record_num[i]==(ymax-ymin+1)*2+(xmax-xmin+1)-2){if(xmax-xmin+1<3){}else{int xx=1;for(q=ymin; q<=ymax; q++){if(b[xmin][q]!=i||b[ymax][q]!=i||b[xmin+xx++][q]!=i){break;}}if(q==ymax+1){N_temp=1;N++;}}}///   Tif(N_temp==0){if(record_num[i]==ymax-ymin+1+xmax-xmin+1-1){if((ymax-ymin+1)%2==1){for(q=ymin; q<=ymax; q++){if(b[xmin][q]!=i){break;}}if(q==ymax+1){for(p=xmin; p<=xmax; p++){if(b[p][(ymax+ymin)/2]!=i){break;}}}if(p==xmax+1&&q==ymax+1){T++;T_temp=1;}if(T_temp==0){for(q=ymin; q<=ymax; q++){if(b[xmax][q]!=i){break;}}if(q==ymax+1){for(p=xmin; p<=xmax; p++){if(b[p][(ymax+ymin)/2]!=i){break;}}}if(p==xmax+1&&q==ymax+1){T++;T_temp=1;}}}if((xmax-xmin+1)%2==1&&T_temp==0){for(p=xmin; p<=xmax; p++){if(b[p][ymin]!=i){break;}}if(p==xmax+1){for(q=ymin; q<=ymax; q++){if(b[(xmax+xmin)/2][q]!=i){break;}}}if(p==xmax+1&&q==ymax+1){T++;T_temp=1;}if(T_temp==0){for(p=xmin; p<=xmax; p++){if(b[p][ymax]!=i){break;}}if(p==xmax+1){for(q=ymin; q<=ymax; q++){if(b[(xmax+xmin)/2][q]!=i){break;}}}if(p==xmax+1&&q==ymax+1){T++;T_temp=1;}}}}}if(N_temp==0&&T_temp==0){if(record_num[i]==(ymax-ymin+1)*3+xmax-xmin+1-3){}if(E_temp==0&&record_num[i]==ymax-ymin+1+(xmax-xmin+1)*3-3){}}}}cout<<"N:"<<N<<endl;cout<<"T:"<<T<<endl;}/*for(i=0; i<n; i++){for(j=0; j<s; j++){cout<<b[i][j]<<" ";}cout<<endl;}for(i=1;i<=num;i++){cout<<record_num[i]<<endl;cout<<record_xy[i][0]<<" "<<record_xy[i][1]<<" "<<record_xy[i][2]<<" "<<record_xy[i][3]<<endl;}*/return 0;
}


#include <iostream>
#include <cstring>
using namespace std;int power_10(int n)
{int r=1;for(int i=0; i<n; i++)r*=10;return r;}
int main()
{int pp;int nn;cin>>nn;for(pp=0; pp<nn; pp++){char a[10],b[10];char a_r[10],b_r[10];int c;cin>>a>>b>>c;int i,j;int len_a=strlen(a);int len_b=strlen(b);for(i=0; i<len_a; i++){a_r[i]=a[len_a-1-i];}for(i=0; i<len_b; i++){b_r[i]=b[len_b-1-i];}int a_temp,b_temp;int a_num[10],b_num[10];int i1,i2;int sum=0;for(i=power_10(len_a-1); i<power_10(len_a); i++){for(j=power_10(len_b-1); j<power_10(len_b); j++){a_temp=i;b_temp=j;int flag=1;for(i1=0; i1<len_a&&flag; i1++){a_num[i1]=a_temp%10;a_temp/=10;if(a_num[i1]==0)flag=0;}for(i2=0; i2<len_b&&flag; i2++){b_num[i2]=b_temp%10;b_temp/=10;if(b_num[i2]==0)flag=0;}int flag1=1;if(flag==1){for(i1=0; i1<len_a&&flag1; i1++){if(a_r[i1]!='X'&&a_r[i1]!=a_num[i1]+'0'){flag1=0;}}for(i2=0; i2<len_b&&flag1; i2++){if(b_r[i2]!='X'&&b_r[i2]!=b_num[i2]+'0'){flag1=0;}}}if(flag==1&&flag1==1&&i+j==c){sum++;}}}cout<<sum<<endl;}return 0;
}



这篇关于网易实习--编程题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085630

相关文章

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

16.Spring前世今生与Spring编程思想

1.1.课程目标 1、通过对本章内容的学习,可以掌握Spring的基本架构及各子模块之间的依赖关系。 2、 了解Spring的发展历史,启发思维。 3、 对 Spring形成一个整体的认识,为之后的深入学习做铺垫。 4、 通过对本章内容的学习,可以了解Spring版本升级的规律,从而应用到自己的系统升级版本命名。 5、Spring编程思想总结。 1.2.内容定位 Spring使用经验

IPython小白教程:提升你的Python交互式编程技巧,通俗易懂!

IPython是一个增强的Python交互式shell,它提供了丰富的功能和便捷的交互方式,使得Python开发和数据分析工作更加高效。本文将详细介绍IPython的基本概念、使用方法、主要作用以及注意事项。 一、IPython简介 1. IPython的起源 IPython由Fernando Pérez于2001年创建,旨在提供一个更高效的Python交互式编程环境。 2. IPyt

从《深入设计模式》一书中学到的编程智慧

软件设计原则   优秀设计的特征   在开始学习实际的模式前,让我们来看看软件架构的设计过程,了解一下需要达成目标与需要尽量避免的陷阱。 代码复用 无论是开发何种软件产品,成本和时间都最重要的两个维度。较短的开发时间意味着可比竞争对手更早进入市场; 较低的开发成本意味着能够留出更多营销资金,因此能更广泛地覆盖潜在客户。 代码复用是减少开发成本时最常用的方式之一。其意图

Java并发编程—阻塞队列源码分析

在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。   在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了D

剑指offer—编程题7(用两个栈实现一个队列)

题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。 代码如下: [java]  view plain copy print ? public class Test07 {       /**       * 用两个栈模拟的队列       *

剑指Offer—编程题4 ( 替换空格)

一、题目:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。    在网络编程中,如果URL参数中含有特殊字符,如空格、'#'等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在'%'后面跟上ASCII码的两位十六进制的表示。

剑指Offer—编程题56(链表中环的入口地址)

题目:一个链表中包含环,如何找出环的入口结点? 解题思路   可以用两个指针来解决这个问题。先定义两个指针P1和P2指向链表的头结点。如果链表中环有n个结点,指针P1在链表上向前移动n步,然后两个指针以相同的速度向前移动。当第二个指针指向环的入口结点时,第一个指针已经围绕着环走了一圈又回到了入口结点。    剩下的问题就是如何得到环中结点的数目。我们在面试题15的第二个相关题目时用到

剑指Offer—编程题15(链表中倒数第k个结点)

题目:输入一个链表,输出该链表中倒数第k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6 个结点,从头结点开始它们的值依次是1 、2、3、4、5 、6。这个个链表的倒数第3 个结点是值为4 的结点. public static class ListNode {int value;ListNode next;} 解题思路: