* 标题:错误票据
某涉密单位下发了某种票据,并要在年终全部收回。
每张票据有唯一的ID号。
全年所有票据的ID号是连续的,
但ID的开始数码是随机
选定的。
因为工作人员疏忽,
在录入ID号的时候发生了一处错误,
造成了某个ID断号,
另
外一个ID重号。
你的任务是通过编程,找出断号的ID和重号的ID。
假设断号不可能发生在最大和最小号。
要求程序首先输入一个整数N(N<100)表示后面数据行数。接着读入N行数据。每
行数据长度不等,
是用空格分开的若干个
(不大于100个)
正整数
(不大于100000)
每个整数代表一个ID号。
要求程序输出1行,含两个整数m
n,用空格分隔。其中,m表示断号ID,n表示重
号ID
例如:用户输入:
2
5 6 8 11 9
10 12 9
则程序输出:7 9
再例如:用户输入:6
164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129
168 196172 189 127 107 112 192 103 131 133 169 158 128 102 110 148 139
157 140 195 197185 152 135 106 123 173 122 136 174 191 145 116 151 143
175 120 161 134 162 190149 138 142 146 199 126 165 156 153 193 144 166
170 121 171 132 101 194 187 188113 130 176 154 177 120 117 150 114 183
186 181 100 163 160 167 147 198 111 119
则程序输出:105 120
资源约定:峰值内存消耗(含虚拟机) < 64MCPU消耗 < 2000ms
*/
import
java.util.Scanner;
public
class
Main {
static
int
hash
[] =
new
int
[100001];
public
static
void
main(String[] args) {
Scanner cin =
new
Scanner(System.
in
);
int
N = cin.nextInt();
int
min = 100001, max = -1;
int
m = 0, n = 0;
String strLine = cin.nextLine();
// 过滤第一次输入n带来的回车换
行
while
(N-- != 0) {
strLine = cin.nextLine();
Scanner s =
new
Scanner(strLine);
while
(s.hasNextInt()) {
int
t = s.nextInt();
min = Math.
min
(t, min);
max = Math.
max
(t, max);
hash
[t]++;
}
}
for
(
int
i = min; i <= max; i++) {
if
(
hash
[i] == 0)
m = i;
if
(
hash
[i] == 2)
n = i;
}
System.
out
.println(m +
" "
+ n);
}
}
java算法题,这样做对吗?哪位大神能给我解释一下,越详细越好。我就10金币了,大神冒泡吧
答案:2 悬赏:0 手机版
解决时间 2021-02-09 17:32
- 提问者网友:人生佛魔见
- 2021-02-09 04:47
最佳答案
- 五星知识达人网友:零点过十分
- 2021-02-09 05:37
你的程序没有问题
全部回答
- 1楼网友:枭雄戏美人
- 2021-02-09 06:14
运行几个是正常的,只怕不符合某个指标,如内存、CPU
static int hash[] = new int[1000001]; //放到 main 里面
.................
重点是理解这个数组的作用。和这里
hash[t]++;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯