Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

s.donkova avatar s.donkova 0 Точки

[Homework] Programming Fundamentals - Arrays and Lists - Lab - Tripple Sum

Здравейте, първата проверка с 4 единици не ми излиза правилна и judge ми дава 90 точки. Можете ли да ми кажете защо?

Това е кодът:

 

              int[] nums = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            for (int i = 0; i < nums.Length; i++)
                for (int j = i + 1; j < nums.Length; j++)
                {
                    int a = nums[i];
                    int b = nums[j];
                    int sum = a + b;
                    if (nums.Contains(sum))                    
                        Console.WriteLine($"{a} + {b} == {sum}");                    
                    else if (a + b != sum)                                            
                        Console.WriteLine("No");                    
                    else if (a == 1 && b == 1)                    
                        Console.WriteLine("No");

Тагове:
0
Programming Fundamentals 03/10/2016 18:40:49
Maria_ls avatar Maria_ls 383 Точки
Best Answer

Проблемът са ти else if-овете. Ти в случая с 4-те еднакви цифри проверяваш всяка със всяка и при всяка проверка пишеш No, 4 пъти общо, а се търси само веднъж. И плюс това - за втория else if ако в теста се търсеха 2 2 2 2 или 3 3 3 3, каква щеше да е проверката?

Моят съвет е в началото да си декларираш една bool променлива = false, а вътре в if да я промениш на true, и вече извън for-циклите да провериш дали още е = false и тогава да отпечатиш No. И нямаш нужда от нито единия от двата if else.

http://pastebin.com/fXNizqYD

Друг вариант е някакъв брояч да сложиш на същия принцип и после да проверяваш дали му се е увеличила ст-ста.

0
03/10/2016 18:06:38
ivan.d.uzunov avatar ivan.d.uzunov 22 Точки

И е много хубаво след последната проверка да се сложи break;, споменавам го само, защото доста време се чудих, защо ми излиза няколко пъти "No" laugh

0
ivan.d.uzunov avatar ivan.d.uzunov 22 Точки

и честно казано не мога да си обясня защо,( просто беше един от вариантите, които пробвах за да решеа проблема) при условие че е извън цикъла, но... http://pastebin.com/ivkFbn5H .... ако някой ми каже, ще е супер

0
Maria_ls avatar Maria_ls 383 Точки

Нямашe да имаш нужда от никакъв break, ако сложиш тази проверка за Сум извън for циклите, а не между двата. А на теб ти е излизал много пъти No, защото ти след всяко завъртане на i проверяваш дали Сум == false и пишеш No. 

0
Pilgrimage avatar Pilgrimage 515 Точки

Пробвай да сложиш едни скобки тук :

 else if ((a + b) != sum)

0
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Външния цикъл трябва да го въртиш до  i < nums.Length - 1

0
03/10/2016 17:46:21
Maria_ls avatar Maria_ls 383 Точки

И междувременно да попитам някой има ли идея защо кодът написан по този начин - с Contains() изкарва 100/100  https://dotnetfiddle.net/iynGIg

А по този - с още един for цикъл, вместо Contains() само 60/100. https://dotnetfiddle.net/PCOFrX

Алгоритъмът и на двете решения е един и същ.

0
Pilgrimage avatar Pilgrimage 515 Точки

Защото с цикъл дава повече резултати.

Пробвай го с "6 0 6".

6 + 0 = първото 6

и после пак за второто 6

после за 0 + 6 пак излизат два резултата.

Явно това не е по нрава на Judge за когото двете шестици са едно! :-)

1
05/10/2016 13:42:24
Maria_ls avatar Maria_ls 383 Точки

Много благодаря! Чудех се дали с break би се оправило, ама така и не проверих smiley

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.