关注
package huawei;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;
public class Q0003_serverArrange {
/*
* 0:无服务器
* 1:有服务器
* -1:服务器宕机
*
* 初始服务器:以 0位初始,50为间隔,
* 增添服务器:以25为初始,若加500不溢出,则加500,否则加50
*/
public static void main(String[] args) throws IOException {
System.setIn(new BufferedInputStream(new FileInputStream("resource/huawei0003.txt")));
Scanner sc = new Scanner(System.in);
String[] command = sc.nextLine().split(":");
int[] servers = new int[1000];
arrageServer(servers, 20, false);
int index;
String[] temp;
switch (command[0]) {
case "1":
temp = command[1].split("_");
index = Integer.parseInt(temp[temp.length - 1]);
System.out.println((index - 1) * 50);
break;
case "2":
index = getHash(command[1]);
System.out.println(findServer(servers, index));
break;
case "3":
//处理宕机服务器
temp = command[1].split(";");
String[] shutdowns = temp[0].split(",");
for (int i = 0; i < shutdowns.length; i++) {
String[] curTemp = shutdowns[i].split("_");
shutdownServer(servers, Integer.parseInt(curTemp[curTemp.length - 1]));
}
index = getHash(temp[temp.length - 1]);
System.out.println(findServer(servers, index));
break;
case "4":
temp = command[1].split("_");
index = Integer.parseInt(temp[temp.length - 1]);
System.out.println((index - 1) * 50 + 25);
break;
case "5":
temp = command[1].split(";");
String[] addServers = temp[0].split("_");
arrageServer(servers, Integer.parseInt(addServers[addServers.length - 1]), true);
index = getHash(temp[1]);
System.out.println(findServer(servers, index));
break;
}
}
// 计算token的哈希值
public static int getHash(String str) {
int res = 0;
for (int i = 0; i < str.length(); i++) {
res += (int) str.charAt(i);
res %= 999;
}
return res;
}
// 查找分配服务器位置
public static int findServer(int[] arr, int index) {
if (arr[index] != 0)
return index;
while (true) {
index = (index + 1) % arr.length;
if (arr[index] == 1)
return index;
}
}
// 设置宕机服务器
public static void shutdownServer(int[] arr, int index) {
arr[(index - 1) * 50 + 0] = -1;
}
// 安排服务器
public static void arrageServer(int[] arr, int num, boolean isAdd) {
int gap = 50;
if (!isAdd) {
//首次添加
for (int i = 0; i < num; i++) {
arr[i * gap] = 1;
}
} else {
int index = 25;
arr[index] = 1;
for (int i = 1; i < num; i++) {
index = index + 500 > 1000 ? index - 450 : index + 500;
arr[index] = 1;
}
}
}
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
10-31 11:06
合肥经济学院 C工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 找工作能把i人逼成什么样 #
14727次浏览 174人参与
# 上班到公司第一件事做什么? #
109391次浏览 740人参与
# 你今年做了几份实习? #
9810次浏览 145人参与
# 工作两年想退休了 #
203452次浏览 1799人参与
# 你开始找寒假实习了吗? #
15943次浏览 210人参与
# 新凯来求职进展汇总 #
64128次浏览 171人参与
# 影石Insta360求职进展汇总 #
166509次浏览 1335人参与
# 大厂面试初体验 #
83648次浏览 385人参与
# 0经验如何找实习? #
27099次浏览 456人参与
# 面试尴尬现场 #
205433次浏览 821人参与
# 大学最后一个寒假,我想…… #
72273次浏览 727人参与
# 25届秋招公司红黑榜 #
306662次浏览 1252人参与
# 什么样的公司千万别去 #
28039次浏览 148人参与
# 大家每天通勤多久? #
64517次浏览 415人参与
# 金融财经春招备战日记 #
43904次浏览 216人参与
# 央国企投递记录 #
166059次浏览 1622人参与
# 你找工作经历过哪些骗局? #
9763次浏览 144人参与
# 机械人值得去的半导体企业 #
32991次浏览 183人参与
# 字节出了豆包coding模型 #
6879次浏览 61人参与
# 一起聊华为 #
168586次浏览 820人参与
海康威视公司福利 1407人发布