Здравейте @Team,
първо да кажа, че винаги съм се стремял да бъда честен с хората и като се хвана да правя нещо, наистина да го правя с внимание и старание. Това обаче, все повече се убеждавам, не ми помага да решавам поставените проблеми. Дори напротив. И днес вече спрях да бъда честен и ще ви разкажа защо и как се случи. Оказа се, че и вие не играете честно и по-надолу ще разберете какво имам предвид.
От няколко дни се опитвам да реша тази задача от Mock Exam 4, задача №2:
И каквото и да опитам все еднакъв резултат:
И се чудя какво не му е наред на този код.
import java.util.Scanner;
public class MockExam4_2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] input1 = scanner.nextLine().split(",");
String[] input2 = scanner.nextLine().split(",");
int[] subSet = new int[input1.length];
int[] fullSet = new int[input2.length];
for (int i = 0; i < input1.length; i++) {
subSet[i] = Integer.parseInt(input1[i]);
}
for (int i = 0; i < input2.length; i++) {
fullSet[i] = Integer.parseInt(input2[i]);
}
int[] newSet = new int[subSet.length];
for (int i = 0; i < subSet.length; i++) {
for (int j = 0; j < fullSet.length; j++) {
if (subSet[i] != fullSet[j]) {
continue;
}
newSet[i] = -1;
for (int k = j + 1; k < fullSet.length; k++) {
if (fullSet[j] > fullSet[k]) {
continue;
}
newSet[i] = fullSet[k];
break;
}
break;
}
}
for (int i = 0; i < newSet.length; i++) {
System.out.print(newSet[i]);
if (i < newSet.length-1) {
System.out.print(",");
}
}
}
}
И да ви кажа, днеска най-сетне разбрах. Отговора е: Нищо! Всичко му е наред.
Вече няколко пъти се сблъсквам с неправилно формулирани условия на задачи, които иначе се решават лесно, само че ако условието ти е поставено ясно и точно. Вероятно така ще се работи и на практика. Трябва да направиш нещо, правиш го, после казват, че това не работи, защото ти си трябвало да направиш нещо, което те са искали да ти кажат. Пък и ти си бил длъжен да знаеш, какво те са искали да ти кажат.
Може ли някой да каже как разбира маркираното в Constraints изречение? Аз разбирам че във всеки масив, всички елементи са уникални, т.е. не се повтарят или просто няма два еднакви. Кой сложи това условие и направи точно обратното? Не вярвам че е направено умишлено. Следователно не моето решение е грешно, а оценяването е грешно. Но няма значение оценката. Принципа е важен. Много държа на принципите и все заради това страдам.
Три дни отделих на тази задача и какво ли не пробвах. Пробвах с long, защото допусках че може да има такова число с 18 цифри. Бях започнал да работя върху вариант при който, числата от масива може и да са с над 18 цифри. И в крайна сметка вече реших да играя грубо и реших да разчепкам малко Judge и да го попитам с какви данни тества кода ми. Чрез подвеждане го накарах да ми връща на отделни части информация за входните данни и така постепенно извлякох цялата информация и какво се оказа:
първи масив с 14 елемента:
11198,11197,2020,2021,2222,2223,44444,4343,4344,10000000,100000000,999999,1000,999
втори масив с 33 елемента:
100000000,4344,11198,11197,2,1,1,2,3,5,4,7,6,8,9,99,100,108,101,102,111,110,11198,2020,2021,2222,2223,44444,4343,10000000,999999,1000,999
Това е конкретно за Тест№13, входните данни с които Judge тества кода ми. В първия масив наистина числата са уникални, но във втория не са. И тъй като най-вътрешния цикъл търси докато числото ми е по-голямо от всяко следващо, аз съм с презумцията че няма да срещне друго еднакво число, но срещайки го, вече условието да е по-голямо не е вярно, цикъла приключва, връщайки грешна стойност и прехвърляйки изпълнението върху най-външния цикъл.
Аз упорито и до последно се съпротивлявах на мисълта, че може да има еднакви числа, в случай че в условието пише изрично, че числата са уникални за всеки масив. И бях наистина втрещен от това което видях.
Много ви моля, наистина ако искате добри резултати, поставяйте си условията прецизно. Не е единствената задача в която има неточности в условието, но на този конкретен случай отделих прекалено много време, което време можех да използвам по-пълноценно, като да решавам още задачи или да чета нови неща. Благодаря че изчетохте всичко. Не съм ядосан, не съм разочарован, още по-мотивиран съм и смятам, че да си казваме нещата едно към едно е полезно и за двете страни. Аз се чувствам удовлетворен от това, че напълно изясних и изчистих въпроса. Бъдете здрави и усмихнати и ако смятате че съм бил прекалено нахален, приемете моите извинения