Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+5 невидимых)

 eXeL@B —› Программирование —› Олимпиадные задачи - робот автоматической проверки
Посл.ответ Сообщение

Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 09 апреля 2008 18:44
· Личное сообщение · #1

Вот бьюсь уже который день над сайтиком с инетерсными програмерскими задачками - типа пишеш на С++ или JAVA, шлеш им исходник, и тут же получаеш ответ, верно ли решена задача.
Сколько не пытался решать, пишет что неверный ответ, хотя свиду верно. Думаю многим тоже будет интересно мозги поразмять. Может поможет кто хоть одну задачу решенную дать. Сайт находится здесь: icpcres.ecs.baylor.edu/onlinejudge.

Вот пример, выбрал совсем простенькую задачку, называется "3n+1". Вот ее краткое условие:
Рассмотрим следующий алгоритм генерации последователльности чисел. Начнем с числа n. Если n четно, то поделим на 2. Если n нечетно, то умножим на 3 и добавим 1. Будем повторять этот процесс с новым полученным n, пока n не станет равным единице. Напрмер, для n=22 будет сгенерирована следующая последовательность сисел:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

Почти уверен что решил эту совсем простенькую задачку верно, но "робот" кричит что ошибка. Может кто то поможет - мне бы исходник любой решенной задачи на этом сайте.

В аттаче решенная (по мнению робота неверно) задача 3n+1 и примеры входных и выходных данных.

ff5a_09.04.2008_CRACKLAB.rU.tgz - 3n+1.zip



Ранг: 210.5 (наставник), 2thx
Активность: 0.140
Статус: Участник

Создано: 09 апреля 2008 18:57
· Личное сообщение · #2

www.codeguru.com/cpp/cpp/algorithms/math/article.php/c7979/



Ранг: 47.5 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 09 апреля 2008 18:57 · Поправил: HellStudent
· Личное сообщение · #3

smex

Ну и забей на эту проверяющую систему. Есть же нормальные: acm.timus.ru/

А этот то-ли косит, то ли в правду относится к acm.uva.es/
Там и посмотри



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 09 апреля 2008 19:01 · Поправил: tihiy_grom
· Личное сообщение · #4

На дэлфи в консольном проекте

var
s: integer;
begin
write('Enter value : ');
readln(s);
while s<>1 do begin
write(inttostr(s) + ' ');
if s mod 2 <> 0 then begin
s:=s*3+1;
end else begin
s:=s div 2;
end;
end;
write(inttostr(s));
readln(s);
end.

Добавлено : затупил там же на c++ надо, простите меня



Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 09 апреля 2008 19:15 · Поправил: smex
· Личное сообщение · #5

HellStudent пишет:
А этот то-ли косит, то ли в правду относится к http://acm.uva.es/ http://acm.uva.es/

Вот что он пишет:
WE HAVE MIGRATED TO A NEW SERVER.
From now, you must submit your codes there.
Go to http://icpcres.ecs.baylor.edu/onlinejudge/ http://icpcres.ecs.baylor.edu/onlinejudge/ and register.


HellStudent пишет:
Ну и забей на эту проверяющую систему. Есть же нормальные: http://acm.timus.ru/ http://acm.timus.ru/

Просто нашел книжку "Олимпиадные задачи по программированю" в которой очень интересно и качественно описано решение подобного рода задач. А на acm.timus.ru нету тех задач которые надо, да и в целом архив задач небольшой.


arnix пишет:
http://www.codeguru.com/cpp/cpp/algorithms/math/article.php/c7979/ http://www.codeguru.com/cpp/cpp/algorithms/math/article.php/c7979/

Да походу и я тоже решил верно, вопрос был не в том как решить эту задачу, а как сделать чтобы робот принял ее. Но все равно спасибо за участие.



Ранг: 31.5 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 10 апреля 2008 16:38
· Личное сообщение · #6

Ну наконцто, откопал решение 10137 задачи. Теперь понятно как она принимает решения. Если кому интересно решать задачки на этом сайте постите тут. выкладываю решение 10137 задачи под названием The Trip


/*
* A solution for "The Trip" problem.
* UVa ID: 10137
*/
#include <stdio.h>

int main (int argc, const char * argv[]) {
/* number of students in the trip */
long numOfStudents;

/* the total sum of money spent */
double total;

/* the total amount of money to exchange in order to equalize */
double exchange;

/* the equalized trip amount to be payed by each student */
double equalizedAmount;

/* difference between the equalized amount and the amount spent */
double diff;

/* sum of all negative differences */
double negativeSum;

/* sum of all positive differences */
double positiveSum;

/* iterator */
int i;

while(scanf("%ld", &numOfStudents) != EOF) {

/* 0, ends the program */
if (!numOfStudents) {
return 0;
}

/* keeps the amount of money spent by each student */
double amountSpent[numOfStudents];

/* clean */
total = 0;
negativeSum = 0;
positiveSum = 0;

for (i = 0; i < numOfStudents; i++) {
scanf("%lf\n", &amountSpent[i]);
total += amountSpent[i];
}

equalizedAmount = total / numOfStudents;

for (i = 0; i < numOfStudents; i++) {
/* to ensure 0.01 precision */
diff = (double) (long) ((amountSpent[i] - equalizedAmount) * 100.0) / 100.0;

if (diff < 0) {
negativeSum += diff;
} else {
positiveSum += diff;
}
}

/* when the total amount is even, these sums do not differ. otherwise, they differ in one cent */
exchange = (-negativeSum > positiveSum) ? -negativeSum : positiveSum;

/* output result */
printf("$%.2lf\n", exchange);
}

return 0;
}



 eXeL@B —› Программирование —› Олимпиадные задачи - робот автоматической проверки
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати