前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记京东笔试编程题目(JAVA开发)

记京东笔试编程题目(JAVA开发)

作者头像
相思不扫积久弥厚
发布2023-10-26 14:21:05
1220
发布2023-10-26 14:21:05
举报

第一题是给你2,3,5三个数字,问你用这三个数字组成的数字按照大小排序,第n个是多少。(2,3,5,22,23,25,32,33,35,52,53,55,222,223........)

思路:1位数是3个,2位数是9个,k位数是3^k个,用n一路减下去,看看第n个是几位数,如第10个的话,10>3,所以大于一位数,10-3=7,7<=9,所以是两位数,两位数里的第7个,这题就转换成3进制中第7个数字是什么了(两位数),由于进制是0-base,所以7-1=6,一个个位算下去,6%3=0,所以第一位选择第0个的2,然后6/3=2,算第2位,2%3=2,所以选择第2个数5,最后结果是52~

代码不贴了~

第二题是很简单的dp问题,问你一个类型下面的图,一个球从上往下滚,每滚到一个数字就加上它,滚到最底层的时候,最大的数是多少?(只能向下或向左下右下滚)

                                                3

                                       2       5       7

                              9       6       2       7       4

                     6       7       4       7       9       5       10

首先把这个图装换一下变成

3

2       5       7

9       6       2       7       4

6       7       4       7       9       5       10

然后每个球只能往下,右下,右右下滚,就好做了~

dp一波就行了~

代码如下:

代码语言:javascript
复制
#include <iostream>
#include<stdio.h>
#include<string>
#include <vector>
#include <algorithm>
#include <stack>
#include <set>
#include <map>
#include<string.h>
using namespace std;
int dp[1000];
int a[1000];
int main()
{
	int n;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		for (int j = 0; j < 2 * i - 1; j++)scanf("%d", &a[j]);
		for (int j = 2 * i - 2; j >=0; j--)
		{
			if (j >= 2 && dp[j - 2] > dp[j])dp[j] = dp[j - 2];
			if (j >= 1 && dp[j - 1] > dp[j])dp[j] = dp[j - 1];
			dp[j] += a[j];
		}
	}
	int ans = dp[0];
	for (int j = 0; j < 2 * n - 1; j++)ans = ans > dp[j] ? ans : dp[j];
	printf("%d\n", ans);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-278,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档