丢失的三个数 (Java实现)
程序员文章站
2024-03-16 17:32:22
...
现在有一个数组,其值为从1到10000的连续增长的数字。出于某次偶然操作,导致这个数组中丢失了某三个元素,同时顺序被打乱,现在需要你用最快的方法找出丢失的这三个元素,并且将这三个元素根据从小到大重新拼接为一个新数字,计算其除以7的余数。 例:丢失的元素为336,10,8435,得到的新数字为103368435,除以七的余数为2。
乱序数组输入版本:
import java.util.ArrayList;
import java.util.Scanner;
public class ThreeNumbersLost {
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
String s = inScanner.nextLine();//一行字符串,中有空格隔开每个数
String[] numbers = s.split(" ");//去掉每个空格
int[] inumbers = new int[numbers.length];//新建一个数组 长度为原字符串数组长度
for (int i = 0; i < numbers.length; i++) {//把每个字符串转型成int类型装入新的字符串
inumbers[i] = Integer.parseInt(numbers[i]);
}
out(inumbers);
}
public static void out(int[] in) {
int all = 10001;
int[] is = new int[all];// 被赋值的对比数组
int[] orderIn = bubbleSort(in);//对输入的乱序 int型数组 排序
ArrayList iList = new ArrayList(3);//装3个损失数
for (int i = 0; i < in.length; i++) {
is[orderIn[i]] = 1;//把遗漏的数组 中的每个数字作为新数组下标 赋值为1
}
is[0]=1;//第一个默认为1
for (int i = 0; i < is.length; i++) {//循环判断数组中未赋值为1的就是遗漏数据
if (is[i] == 0) {
iList.add(i);//把遗漏的数据加入动态数组
}
}
String link = "" + iList.get(0) + iList.get(1) + iList.get(2);//拼接3个数字
System.out.println(Long.parseLong(link)%7);//余7后输出
}
public static int[] bubbleSort(int[] a) {
int temp;
for (int i = a.length - 1; i > 0; --i) {
for (int j = 0; j < i; ++j) {
if (a[j + 1] < a[j]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
return a;
}
}
整型单个输入
import java.util.ArrayList;
import java.util.Scanner;
public class ThreeNumbersLost {
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
int[] is = new int[10001];// 被赋值的对比数组
ArrayList iList = new ArrayList(3);//装3个损失数
for (int i = 0; i < 9997; i++) {
is[inScanner.nextInt()] = 1;//把遗漏的数组 中的每个数字作为新数组下标 赋值为1
}
is[0]=1;//第一个默认为1
for (int i = 0; i < is.length; i++) {//循环判断数组中未赋值为1的就是遗漏数据
if (is[i] == 0) {
iList.add(i);//把遗漏的数据加入动态数组
}
}
String link = "" + iList.get(0) + iList.get(1) + iList.get(2);//拼接3个数字
System.out.println(Long.parseLong(link)%7);//余7后输出
}
}
上一篇: 情人节,超赞程序员这样表达自己的爱意~