我的输入是一个整数假设M,程序必须打印两个整数x和ywhere 的所有组合x + y = M。让我们将输入作为M = 50和数组元素作为25 20 25 30 15 45 45 5 ,我需要的输出是5 45,20 30,25 25.但我的输出是5 45,5 45,20 30,25,25如何消除那两次的发生5 45?我的代码如下Scanner s = new Scanner(System.in);int m = s.nextInt();s.nextLine();String str = s.nextLine();StringTokenizer st = new StringTokenizer(str);int len = st.countTokens();int[] a = new int[len];String[] temp = new String[len];for (int i = 0; i < len; i++){ temp[i] = st.nextToken(); a[i] = Integer.parseInt(temp[i]);}Arrays.sort(a);for (int i = 0;i < len-1; i++){ for(int j = i + 1; j < len; j++) { if ((a[i] +a [j]) == m) System.out.println(a[i] + " " + a[j]); }}
3 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
使用break用于跳过重复数(内环),并检查(a[i] - a[i+1]) == 0和使用continue跳过外环重复数。
仅在for循环中包含以下更改,完美运行
// Init a new array.
for(int i=0;i<len-1;i++)
{
if((a[i] - a[i+1]) == 0)
continue; // for skipping repeated number in outer loop
for(int j=i+1;j<len;j++)
{
if((a[i]+a[j])==m ) {
System.out.println(a[i]+" "+a[j]);
break; // for skipping repeated number in inner loop
}
else if(a[i] == m/2){
System.out.println(a[i]+" "+a[i]);
break;
}
}
}
输入
25 ,20, 25 ,30, 15, 45, 45, 5
输出
5 45
20 30
25 25
输入
5 ,5 ,45, 45, 45
输出
5 45
添加回答
举报
0/150
提交
取消