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 е равно на отрицателното число, но нещо не мога да си го сглобя да ми хваща всяко следващо да е с отрицателен знак.
П.С. така добре ли е според вас:
ест пак добре, че чичко google знае всичко :)
Може ли само да ми кажеш "по-елегантен" се има предвид за код, който няма вложени цикли ли? Смисъл моя код бавен ли е, лош ли е, некоректен ли е? Не се засягам, просто питам, за да знам към какво да се стремя. За момента целя просто да си реша задачата с някакъв код. Предполагам, че все е някакво постижение да го правя на първа лекция още и щом не съм се занимавал с код до момента?
П.С. Благодаря много за коментара - научих, че може да има повече от една променлива в условието на цикъла :)
Аз говорех изцяло за моя код, че не изглежда много четливо и ясно на пръв поглед :). В случая сигурно има още десетки варианти, а отностно това кой вариант е по - бърз, ето как можеш да измерваш изпълнението на дадена програма:
Поздрави!
Уха, това е много яко! Много благодаря! Това може ли да се използва на изпита?
Разбира се, друг е въпросът дали ще ти се наложи.
На изпита са доста либерални ограниченията за памет и време. Трудно ще успееш да излезеш извън тях, трябва да си направил нещо наистина много, много много грешно :) Предполагам, че подобни замерване няма да ти се наложи.
Понеже поразгледах Judge системата и долу имаше ограничение за памет и време...от къде мога да знам за колко милисекунди ми се изпълнява програмата освен със кода на колегата. Или аз нещо не съм разбрал правилно?
Като пуснеш код в джъдж ти показва за колко време е минал. Ако не мине в рамките, зададени като органичение, няма да ти даде точки за съответния тест, при който не е минал :-)
Имай предвид, че ти никога не знаеш входните данни на изпит (или поне се предполага, че не тлябва да ги знаеш). Може някоя задача например да гласи - ще получаваш поредица от имена на ученици и оценки всеки на нов ред, докато не получиш ред, който гласи "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 точки.
Брей...направо ме отказа от макс точки на изпита :D
Добре, ако си минал ограничението за време и големина не взимаш никакви точки или не взимаш макс точки. В смисъл като събмитнеш кода, можеш ли после да си го поправиш? Искам да кажа:
решавам задача, въвеждам кода, събмитвам - превишил съм време или големина - връщам се отново да променям, за да се вместя.
Или във Вижуал Студио си пиша, вкарвам и кода на колегата и гледам дали се вписвам във времето...но големината, как да определя...
Нещо не ми е много ясно :(
Доредактирах си горния пост с пример. Да, можеш да пускаш много решения.
Малииии :)
Аз както се оплитам все повече и повече с всяко следващо добавяне на код смятай за какво ще става въпрос на изпита ...мен няма да ми стигне времето за 5-те задачи :)
Аз не вярвам да го докараш до проблем с времето или паметта, освен ако не пишеш някакви твои си измишльотини, както аз правя обикновено :D Спокойно, винаги по-големият проблем са зачуканите тестове, в които се тестват гранични случаи, от колкото време/памет :)
Ако много вземеш да си блъскаш на някоя задача минавай на следващата. По-добре на 5 задачи да вземеш по 60 точки, от колкото на две по 100 и на другите 0...