Loading...
remote87 avatar remote87 121 Точки

Textbook Exercise 10 1st Lecture

Условие:  Напишете програма, която извежда първите 100 члена на редицата 2,  -3, 4, -5, 6, -7, 8.

Аз имам само това:

using System;

namespace _05.NumbersInRange
{
    class NumbersInRange
    {
        static void Main()
        {
            for (int i = 2; i <= 100; i++)
            {
                Console.WriteLine(i);
            }
        }
    }
}

и нещо блокирам. Моля, някой САМО да ме насочи, не да ми даде готовото решение, защото искам сам да напиша кода. Най-простото, което се сещам е, че i*-1 е равно на отрицателното число, но нещо не мога да си го сглобя да ми хваща всяко следващо да е с отрицателен знак.

П.С. така добре ли е според вас:

http://pastebin.com/zeeRLV9x

ест пак добре, че чичко google знае всичко :)

Тагове:
0
Programming Basics 13/08/2015 20:54:18
djc_bg2015 avatar djc_bg2015 923 Точки

Аз го направих с 3 променливи в условието на цикъла

for (int i = 1, j = 2, k = -3; i <= 50; i += 2, j += 2, k -= 2)

определно, трябва да има по - елегантен начин разбира се

1
remote87 avatar remote87 121 Точки

Може ли само да ми кажеш "по-елегантен" се има предвид за код, който няма вложени цикли ли? Смисъл моя код бавен ли е, лош ли е, некоректен ли е? Не се засягам, просто питам, за да знам към какво да се стремя. За момента целя просто да си реша задачата с някакъв код. Предполагам, че все е някакво постижение да го правя на първа лекция още и щом не съм се занимавал с код до момента?

П.С. Благодаря много за коментара - научих, че може да има повече от една променлива в условието на цикъла :)

0
13/08/2015 22:18:50
djc_bg2015 avatar djc_bg2015 923 Точки

Аз говорех изцяло за моя код, че не изглежда много четливо и ясно на пръв поглед :). В случая сигурно има още десетки варианти, а отностно това кой вариант е по - бърз, ето как можеш да измерваш изпълнението на дадена програма:
 

Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
// тук код
stopwatch.Stop();
Console.WriteLine(stopwatch.Elapsed);

Поздрави!

1
13/08/2015 23:13:14
remote87 avatar remote87 121 Точки

Уха, това е много яко! Много благодаря! Това може ли да се използва на изпита?

0
djc_bg2015 avatar djc_bg2015 923 Точки

Разбира се, друг е въпросът дали ще ти се наложи.

0
14/08/2015 09:03:51
RoYaL avatar RoYaL Trainer 6849 Точки

На изпита са доста либерални ограниченията за памет и време. Трудно ще успееш да излезеш извън тях, трябва да си направил нещо наистина много, много много грешно :) Предполагам, че подобни замерване няма да ти се наложи.

0
remote87 avatar remote87 121 Точки

Понеже поразгледах Judge системата и долу имаше ограничение за памет и време...от къде мога да знам за колко милисекунди ми се изпълнява програмата освен със кода на колегата. Или аз нещо не съм разбрал правилно?

0
RoYaL avatar RoYaL Trainer 6849 Точки

Като пуснеш код в джъдж ти показва за колко време е минал. Ако не мине в рамките, зададени като органичение, няма да ти даде точки за съответния тест, при който не е минал :-)

Имай предвид, че ти никога не знаеш входните данни на изпит (или поне се предполага, че не тлябва да ги знаеш). Може някоя задача например да гласи - ще получаваш поредица от имена на ученици и оценки всеки на нов ред, докато не получиш ред, който гласи "END". Накрая трябва да покажеш да речем, ученикът с най-висока средноаритметична оценка.

Първите нулеви тестове може да са с по 10 ученика, ти ги вкарваш да речем в List<T> и филтрираш. Операцията минава за 0,0001 секунда. Обаче 8мият тест е с 3 милиарда ученика. Вкарваш ги в лист, филтрираш иии... операцията минава за 10 секунди :-))) И съответно този тест гърми за време.

Ето например някаква задачка която съм решавал

Написал съм първо някакъв код (отдолу нагоре се гледа) и съм изкарал 30 точки. Кодът минава за 0,027 секунди. Усетил съм горе долу къде са някои от грешките - дописал съм още малко код и съм изкарал 60 точки. Оправил съм един от проблемите (1вия тест), но съм прецакал друг от тестовете, който до сега е работил вярно и пак ми е дало 60 точки. Кодът вече е станал с адски много зависимости и съм наблъскал адски много if/else и доста масиви, които обхождам с цикли, за да оправя тези зависимости и вече останалите 3 теста минават, ОБАЧЕ кодът е станал АААДСКИ БАВЕН. 90 точки и както виждаш последният тест дава часовниче. Time limit. 0.751 сек - доста по-бавно от 0,027 сек, нали? Като съм разбрал вече, че логиката ми е вярна, просто съм намерил начин как да премахна всички излишни цикли и прочие неща. Отново взимам 90 точки, но последният тест вече не гърми за време, а времето за което се изпълнява програмата вече е нормално 0,034 сек. Усетил съм се къде може да е грешката на последния тест и съм я оправил без да правя глупости и вече съм взел 100 точки.

1
14/08/2015 13:15:32
remote87 avatar remote87 121 Точки

Брей...направо ме отказа от макс точки на изпита :D

Добре, ако си минал ограничението за време и големина не взимаш никакви точки или не взимаш макс точки. В смисъл като събмитнеш кода, можеш ли после да си го поправиш? Искам да кажа:

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

Или във Вижуал Студио си пиша, вкарвам и кода на колегата и гледам дали се вписвам във времето...но големината, как да определя...

Нещо не ми е много ясно :(

0
RoYaL avatar RoYaL Trainer 6849 Точки

Доредактирах си горния пост с пример. Да, можеш да пускаш много решения.

1
remote87 avatar remote87 121 Точки

Малииии :)

Аз както се оплитам все повече и повече с всяко следващо добавяне на код смятай за какво ще става въпрос на изпита ...мен няма да ми стигне времето за 5-те задачи :)

0
RoYaL avatar RoYaL Trainer 6849 Точки

Аз не вярвам да го докараш до проблем с времето или паметта, освен ако не пишеш някакви твои си измишльотини, както аз правя обикновено :D Спокойно, винаги по-големият проблем са зачуканите тестове, в които се тестват гранични случаи, от колкото време/памет :)

Ако много вземеш да си блъскаш на някоя задача минавай на следващата. По-добре на 5 задачи да вземеш по 60 точки, от колкото на две по 100 и на другите 0...

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