美图大数据岗笔试题二
来源:互联网 发布:电脑安装ubuntu双系统 编辑:程序博客网 时间:2024/05/22 02:07
# 原创作品,转载请注明出处,谢谢!@杨福星
(http://blog.csdn.net/luckystar92/article/details)
一、题目介绍
【根据输入的IP信息库,查询特定某一IP所属位置】
二、分析
考虑运用顺序表存储数据
三、编程实现
MeiTu_Main .java
package companyTopic;import java.util.Scanner;/** * 此类为顺序表 美图编程IP查询 * * @author yangfuxing * */public class MeiTU_Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); System.out.print("请输入限定顺序表的最大长度:\t"); SLType SL = new SLType(sc.nextInt()); SL.SLInit(SL); System.out.print("请输入需要录入的IP信息库的数据条数:\t"); int n = sc.nextInt(); for (int i = 0; i < n; i++) { DATA data = new DATA(); data.IP_start = sc.next(); data.IP_end = sc.next(); data.country = sc.next(); data.province = sc.next(); SL.SLAdd(SL, data); } System.out.println("信息库录入完毕,请开始查询:"); while (true) { String ip = sc.next(); DATA data = SL.SLFindByKey(SL, ip); if (data == null) { System.out.println("未识别"); } else { System.out.println(data.country + " " + data.province); } } }}/** * 定义节点 * * @author yangfuxing * */class DATA { /** * 定义结点关键字 */ String IP_start; String IP_end; String country;// 国家 String province;// 省份}/** * 定义顺序表结构 * * @author yangfuxing * */class SLType { /** * @param mAXLEN */ public SLType(int mAXLEN) { super(); MAXLEN = mAXLEN; ListData = new DATA[MAXLEN + 1]; } /** * 定义顺序表的最大长度 */ int MAXLEN; /** * 保存顺序表的结构数组,数组下标从1开始至MAXLEN,下标0弃置不用 */ DATA[] ListData; /** * 顺序表已存结点的数量 */ int ListLen; /** * 初始化顺序表 */ void SLInit(SLType SL) { SL.ListLen = 0;// 初始化为空表 } /** * 计算顺序表元素的数量 * * @return 元素数量:ListLen */ int SLLength(SLType SL) { return (SL.ListLen); } /** * 插入结点 * * @param SL * 顺序表 * @param n * 结点序号 * @param data * 结点元素 * @return boolean值:返回插入是否成功 */ boolean SLInsertList(SLType SL, int n, DATA data) { if (SL.ListLen >= MAXLEN) {// 顺序表结点数量已超过最大数量 System.out.print("顺序表已满,不能插入结点\n"); return false; } if (n < 1 || n > SL.ListLen) {// 插入结点序号不正确 System.out.print("插入结点序号不正确,不能插入结点\n"); return false; } for (int i = SL.ListLen; i >= n; i--) { SL.ListData[i + 1] = SL.ListData[i]; } SL.ListData[n] = data; SL.ListLen++; return true; } boolean SLAdd(SLType SL, DATA data) { if (SL.ListLen >= MAXLEN) { System.out.print("顺序表已满,无法追加!\n"); return false; } SL.ListData[++SL.ListLen] = data; return true; } /** * 根据序号i获取顺序表SL的节点元素 * * @param SL * :顺序表 * @param n * :序号 * @return 序号i对应的节点 */ DATA SLFindByNum(SLType SL, int n) { if (n < 1 || n > SL.ListLen) {// 序号从1开始,DATA[0]弃置未用 System.out.print("输入序错误,不能返回结点\n"); return null; } return SL.ListData[n]; } /** * 通过关键字ip查找结点元素 * * @param SL * @param key * @return */ DATA SLFindByKey(SLType SL, String ip) { String[] str = ip.split("\\."); for (int i = 0; i < 4; i++) { if (str[i].length() < 3) { String ss = ""; for (int j = 0; j < 3 - str[i].length(); j++) { ss += "0"; } str[i] = ss + str[i]; } } String s = str[0] + str[1] + str[2] + str[3]; long l = Long.valueOf(s); DATA data = null; for (int i = 1; i <= SL.ListLen; i++) { String[] str1 = SL.SLFindByNum(SL, i).IP_start.split("\\."); String s1 = str1[0] + str1[1] + str1[2] + str1[3]; long l1 = Long.valueOf(s1); String[] str2 = SL.SLFindByNum(SL, i).IP_end.split("\\."); String s2 = str2[0] + str2[1] + str2[2] + str2[3]; long l2 = Long.valueOf(s2); if ((l >= l1) && (l <= l2)) {// find data = SL.SLFindByNum(SL, i); break; } } return data; }}
四、结束语
*阿星的博客(http://blog.csdn.net/luckystar92)
*此笔记谨供情况相似者参考!
*欢迎交流学习!博主知识浅薄,希望有不对的地方能得到您的指正!谢谢!^_^
**转载请注明出处,谢谢!!!
阅读全文
1 0
- 美图大数据岗笔试题二
- .net笔试题(二)
- 中兴笔试题 (二)
- Java笔试题(二)
- Java 笔试题 二
- 腾讯笔试题(二)
- 笔试题二
- 笔试题二【解答】
- 笔试题二
- 常见笔试题二
- 常见笔试题二
- UC笔试题(二)
- 笔试题(二)
- 阿里笔试题二
- 笔试题编程二
- 金山笔试题二
- 58笔试题二
- 今日头条大数据岗笔试题一
- 一文读懂数据分析的流程和方法论
- 13:乘方计算
- Qt之QCustomPlot范例
- 欢迎使用CSDN-markdown编辑器
- 阿里云热修复sophix详解
- 美图大数据岗笔试题二
- 【11】Bootstrap — Glyphicons字体图标
- unable to resolve host *****:Connection timed out
- Spark Structured Streaming框架(2)之数据输入源详解
- Codeforces Round #432 B. Arpa and an exam about geometry
- jQuery对象与DOM对象
- vue filters过滤器使用
- SSM框架Spring+SpringMVC+MyBatis——详细整合教程
- 精灵进程与僵尸进程