25日 阿里巴巴 算法工程师笔试 编程题第二道 java

菜鸟仓库是一个很大很神奇的地方,各种琳琅满目的商品整整齐齐地摆放在一排排货架上,通常一种品类(sku)的商品会放置在货架的某一个格子中,格子设有统一的编号,方便工人们拣选。 有一天沐哲去菜鸟仓库参观,无意中发现第1个货架格子编码为1,第2-3个分别为1,2,第4-6个格子分别是1,2,3,第7-10个格子编号分别是1,2,3,4,每个格子编号都是0-9中的一个整数,且相邻格子的编号连在一起有如下规律 1|12|123|1234|...|123456789101112131415|...|123456789101112131415……n 这个仓库存放的商品品类非常丰富,共有1千万多个货架格子。沐哲很好奇,他想快速知道第k个格子编号是多少?
输入:
货物的序号K,是一个整数
输出:
货物的编码
输入范例:
10

咳咳,第二题太简单,大家直接看AC的代码吧~
第一题是在节点处有延迟的图的最短路,我就不放代码丢人了~
bug:如果你的代码字符数超过10000,在线笔试不会在时间结束时自动提交,需要你自行点击按钮,第一次发现的
import java.util.Scanner;
public class Main{
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		int k = Integer.parseInt(in.nextLine());
		StringBuilder target = new StringBuilder();
		int length = 0;
		for(int i=1;i<Integer.MAX_VALUE;i++){
			target.append(Integer.toString(i));
			length+=target.length();
			if(length>=k)break;
		}
		int count=length-k;
		int i=0;
		for(i=target.length()-1;count>0;count--,i--){
			
		}
		System.out.println(target.charAt(i));
		
	}
}

#阿里巴巴##算法工程师#
全部评论
第一个循环之后的部分可以简化一下,像这样 int i=target.length()-1-(length-k); System.out.println(target.charAt(i));
点赞 回复 分享
发布于 2017-08-26 10:33
import java.util.Scanner; public class Main { static int a[] = new int[10000]; static int s[] = new int[10000]; static void init() { int i; a[1] = 1; s[1] = 1; for (i = 2; i < 10000; i++) { a[i] = a[i - 1] + (int) Math.log10((double) i) + 1; s[i] = s[i - 1] + a[i]; } } static int Get(int n) { int i = 1; while (s[i] < n) i++; int pos = n - s[i - 1]; return pos; } public static void main(String[] args) { init(); Scanner scan = new Scanner(System.in); while(scan.hasNext()) { int c = scan.nextInt(); System.out.println(Get(c)); } } }
点赞 回复 分享
发布于 2017-09-02 21:54
import math def get_raw_num(n):     num = 0     for i in range(1,n+1):         num += len(str(i))     return num def get_sum_all(n):     sum = 0     for i in range(1,n+1):         sum += get_raw_num(i)     return sum def get_sub(k):     start = k     while(get_sum_all(start) > k):         start -= 1     sub = k - get_sum_all(start)     out = []     for i in range(1,k):         list_i = list(map(int,list(str(i))))         for j in list_i:             if len(out) == sub:                 return j             out.append(j) print(get_sub(100))
点赞 回复 分享
发布于 2017-08-26 15:17
虽然复杂度稍高了些,不过简单暴力啊
点赞 回复 分享
发布于 2017-08-26 11:53
写的python 不知道为啥一直通过0% 蛋疼 本地测了一些都没啥问题  # -*- coding: UTF-8 -*-. #!/bin/python import sys import os import math #/******************************开始写代码******************************/ def generateFact(m): array = [1] for i in xrange(2, m): idx = i - 1 array.append(array[idx - 1] + i) return array def binarySearach(target, array): if array == []: return -1 if target <= array[0]: return 0 if target > array[-1]: return -1 lo, hi = 0, len(array) - 1 while lo + 1 != hi: mid = int((lo + hi) / 2) if target <= array[mid]: hi = mid else: lo = mid return hi #/******************************结束写代码******************************/ _N = int(raw_input()) _m = int(_N / 2) + 3 _array = generateFact(_m) idx = binarySearach(_N, _array) if idx <= 0: # print str(_N) sys.stdout.write(str(_N) + '\n') else: # print str(_N - _array[idx-1]) sys.stdout.write(str(_N - _array[idx-1])+'\n')
点赞 回复 分享
发布于 2017-08-26 11:08
求大佬的第一题java解答
点赞 回复 分享
发布于 2017-08-26 09:55
可以,这操作很骚
点赞 回复 分享
发布于 2017-08-25 21:41

相关推荐

点赞 评论 收藏
分享
评论
点赞
14
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务