为了账号安全,请及时绑定邮箱和手机立即绑定

从任意两个整数的和中删除数组中的相似元素

从任意两个整数的和中删除数组中的相似元素

萧十郎 2021-09-03 17:37:44
我的输入是一个整数假设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


查看完整回答
反对 回复 2021-09-03
  • 3 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信