我怎样才能只显示输出中最大的数字?
How can i show only the largest number from my output?
在这个程序中,我试图显示最长的连续数字。
(例如:输入:1 1 1 2 2 2 2 3 3 3 3 3
,输出:3 4 5
)
我的问题是如何只显示输出中的最大数字。在这个例子中 5
.
我们不允许使用数组,请问还有其他方法可以解决这个问题吗?
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int zahl = 0;
int anzahl = -1;
String maxString = "";
while (sc.hasNextInt()) {
int i = sc.nextInt();
if (anzahl == i | anzahl == -1) {
zahl++;
} else if(anzahl != i) {
maxString += zahl + "\n" ;
zahl = 1;
}
anzahl = i;
}
sc.close();
System.out.println(maxString + (zahl + 1));
}
只需创建一个变量来跟踪循环外的最大数,并在检测到新的子序列时更改它并在循环后检查最后一个子序列的长度:
Scanner sc = new Scanner("1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5");
int zahl = 0;
int anzahl = -1;
String maxString = "";
int maxFreq = 0; // maximal frequency of numbers
while (sc.hasNextInt()) {
int i = sc.nextInt();
if(anzahl == i || anzahl == -1) {
zahl++;
} else {
maxFreq = Math.max(maxFreq, zahl); // update maxFreq
maxString += zahl + "\n" ;
zahl = 1;
}
anzahl = i;
}
maxFreq = Math.max(maxFreq, zahl); // check the tail
sc.close();
//System.out.println(maxString + (zahl + 1) );
System.out.println("maxFreq=" + maxFreq);
打印 maxFreq=6
(4
的计数)。
对于此输入 Scanner sc = new Scanner("1 1 1 2 2 2 2 2 2 2");
,代码打印 maxFreq=7
(我没有足够的代表发表评论)
除了 Alex 所写的之外,您还应该将 else if(anzahl != i)
更改为 else
。
这是我的想法:
Scanner sc = new Scanner("1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5");
int letzter = 0;
int anzahl = 0;
String rekord = "";
while (sc.hasNextInt()) {
int gegeben = sc.nextInt();
if(letzter == -1 || letzter == gegeben) {
anzahl++;
} else {
anzahl = 1;
}
if(rekord == ""){
rekord = String.valueOf(gegeben);
}else if(anzahl > rekord.length()) {
rekord = String.format("%0" + anzahl + "d", 0).replace("0", String.valueOf(gegeben));
}
letzter = gegeben;
}
sc.close();
String rekord 真正拥有当前记录,可以覆盖。
(4 毫秒 运行 时间)
在这个程序中,我试图显示最长的连续数字。
(例如:输入:1 1 1 2 2 2 2 3 3 3 3 3
,输出:3 4 5
)
我的问题是如何只显示输出中的最大数字。在这个例子中 5
.
我们不允许使用数组,请问还有其他方法可以解决这个问题吗?
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int zahl = 0;
int anzahl = -1;
String maxString = "";
while (sc.hasNextInt()) {
int i = sc.nextInt();
if (anzahl == i | anzahl == -1) {
zahl++;
} else if(anzahl != i) {
maxString += zahl + "\n" ;
zahl = 1;
}
anzahl = i;
}
sc.close();
System.out.println(maxString + (zahl + 1));
}
只需创建一个变量来跟踪循环外的最大数,并在检测到新的子序列时更改它并在循环后检查最后一个子序列的长度:
Scanner sc = new Scanner("1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5");
int zahl = 0;
int anzahl = -1;
String maxString = "";
int maxFreq = 0; // maximal frequency of numbers
while (sc.hasNextInt()) {
int i = sc.nextInt();
if(anzahl == i || anzahl == -1) {
zahl++;
} else {
maxFreq = Math.max(maxFreq, zahl); // update maxFreq
maxString += zahl + "\n" ;
zahl = 1;
}
anzahl = i;
}
maxFreq = Math.max(maxFreq, zahl); // check the tail
sc.close();
//System.out.println(maxString + (zahl + 1) );
System.out.println("maxFreq=" + maxFreq);
打印 maxFreq=6
(4
的计数)。
对于此输入 Scanner sc = new Scanner("1 1 1 2 2 2 2 2 2 2");
,代码打印 maxFreq=7
(我没有足够的代表发表评论)
除了 Alex 所写的之外,您还应该将 else if(anzahl != i)
更改为 else
。
这是我的想法:
Scanner sc = new Scanner("1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5");
int letzter = 0;
int anzahl = 0;
String rekord = "";
while (sc.hasNextInt()) {
int gegeben = sc.nextInt();
if(letzter == -1 || letzter == gegeben) {
anzahl++;
} else {
anzahl = 1;
}
if(rekord == ""){
rekord = String.valueOf(gegeben);
}else if(anzahl > rekord.length()) {
rekord = String.format("%0" + anzahl + "d", 0).replace("0", String.valueOf(gegeben));
}
letzter = gegeben;
}
sc.close();
String rekord 真正拥有当前记录,可以覆盖。
(4 毫秒 运行 时间)