Member 13954890 Ответов: 2

Как мне печатать, если дано "нет"? Больше массива, то такой пары не существует


следующая программа печатает все пары, сумма которых равна заданному no. Если таких пар не существует, то как я могу отобразить сообщение о том, что он этого не делает?Если я помещу его в другую часть, то то же самое сообщение печатается arr.length раз.Любой желающий может помочь мне вывести сообщение-"таких пар не существует", если нет. больше или меньше суммы данного массива только один раз?Любая помощь будет оценена по достоинству.

Что я уже пробовал:

public class pairsum {
	
	public static void arri(int arr[],int n)
	{  int first=0,second=0;
		for(int a=0;a<arr.length;a++)
		{	 first=arr[a];
			for(int b=a+1;b<arr.length;b++)
			{	second=arr[b];
				if(first+second==n)
					System.out.printf("(%d, %d)%n",first,second);		
			}
		}	
	}
	public static void main(String args[])
	{
		Scanner s=new Scanner(System.in);
		int arr[]=new int[5];
		System.out.println("enter integer array\n");
		for(int i=0;i<arr.length;i++)
			arr[i]=s.nextInt();
		System.out.println("enter the no. to find sum\n");
		int n=s.nextInt();
		arri(arr,n);
			
	}
}

2 Ответов

Рейтинг:
9

Patrice T

Цитата:
Как мне печатать, если дано "нет"? Больше массива, то такой пары не существует

Ответ скрыт в самом утверждении.
Цитата:
следующая программа печатает все пары, сумма которых равна заданному no. Если таких пар не существует, то как я могу отобразить сообщение о том, что этого не происходит

Когда вы можете знать, что ни одна пара не была найдена ?
- После того, как проверка будет закончена.
Как узнать, что там были какие-то пары или нет ?
- Установите счетчик и считайте их, когда найдете.
public static void arri(int arr[],int n)
{  int first=0,second=0;
    // set the pairs counter here
    for(int a=0;a<arr.length;a++)
    {    first=arr[a];
        for(int b=a+1;b<arr.length;b++)
        {   second=arr[b];
            if(first+second==n) // This is where you know that a pair is found
                System.out.printf("(%d, %d)%n",first,second);
        }
    }
    // end of pairs check is here
}


Рейтинг:
14

Afzaal Ahmad Zeeshan

Хотя алгоритм написан очень плохо, но я не буду об этом говорить. :)

Просто дело в том, что вы можете заставить функцию печатать, что значения в массиве не суммируются со значением, предоставленным внутри самой функции, если итерации закончились. Подобный этому,

public static void arri(int arr[],int n)
{
    int first=0,second=0;
    for(int a=0;a<arr.length;a++) {
        first=arr[a];
        for(int b=a+1;b<arr.length;b++) {
            second=arr[b];
            if(first + second == n) {
                System.out.printf("(%d, %d)%n", first, second);
                return; // Return out of the function.
            }
        }
    }

    // Program reacher here, because the loop didn't find any combination. 
    System.out.println("no such pairs exist");
}

Совет: Вы можете улучшить функцию, используя другой подход, например, используйте один индекс и следуйте вдоль начала массива, а затем суммируйте его с последним элементом в массиве, чтобы увидеть, получили ли вы его. Это будет работать с отсортированными массивами. В случае несортированного номера вы можете попробовать сохранить номера, которые вы видели, и найти его, у вас есть этот номер, доступный в предыдущем списке. Это позволит улучшить текущий алгоритм с O(N2) к O(N).

В академических кругах структуры данных, алгоритмы и уточнения имеют большое значение, пожалуйста, не пропускайте их, иначе получить работу будет сложнее, чем эта простая задача. :-) Только мои 2 цента.