Модераторы: Alx, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решаем интересные задачи, На разных языках программирования 
:(
    Опции темы
Антоха
Дата 17.11.2006, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.11.2006
Где: Новосибирск

Репутация: нет
Всего: нет



Извените если не там создал тему, но ничего более подходящего не нашёл. Предлагаю здесь писать интересные математические и пр. задачи для нахождения их решения с помощью разных языков программирования(пишите решения здесь, на том языке который Вам ближе). И предлагаю закрепить эту тему, т.к. мне кажется особенно для начинающих программистов очень полезно поломать голову впринципе не над сложными задачками, для развития  мышления. А может ктото просто просматривая решения в этой теме чтото новое поймёт для себя. Извините если бонально, но я сам начинающий программист и мне кажется такие задачки помогают тренировать свои мозги smile
Ну раз я создал тему я и начну:
Задача №1: 
Бутылка с пробкой стоит 11 копеек. 
Бутылка на 10 копеек дороже пробки. 
Сколько стоит пробка? 

Я сделал эту задачку на VBA:
Код

Sub prov()
For i = 0 To 1 Step 0.01
a = i + 10
b = i + (i + 10)
If b = 11 Then
MsgBox a 'Выводи цену бутылки
End If
Next i
End Sub



Задача №2(посложнее):
Два города А и В находятся на расстоянии 300 км друг от друга.Из этих городов 
одновременно выезжают друг другу навстречу 2 велосипедиста и едут,не останавливаясь, 
cо скоростью 50 км/ч.Вместе с первым велосипедистом из города А вылетела муха, 
пролетающая в час 100 км.Муха опережает первого велосипедиста,летит навстречу второму. 
Встретив его,она сразу поварачивает назад к первому.Повстречав его,опять летит обратно 
навстречу велосипедисту В,и так продолжалось до тех пор пока велосипедисты не 
встретились. 
Сколько километров пролетела муха? 

Пока решаю... Ждём Ваших задачек smile

PM MAIL ICQ   Вверх
Fazil6
Дата 17.11.2006, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: нет
Всего: 60



Задача№1
а чего так сложно?
Пробка = (11 - 10)/2

Добавлено @ 00:47 
Код

#include <iostream>
int main()
{
    const int a = 50;
    const int b = 50;
    const int s = 300;
    const int m = 100;

    int t = s/(a + b);   

    std::cout << "Muh proletel " << t*m << " km.";

    return 0;
}

PM MAIL   Вверх
Антоха
Дата 17.11.2006, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.11.2006
Где: Новосибирск

Репутация: нет
Всего: нет



Цитата(Fazil6 @  17.11.2006,  00:33 Найти цитируемый пост)
Задача№1
а чего так сложно?
Пробка = (11 - 10)/2

Ты прав! Но не я не сразу до этого додумался например, и мне интересней чем считать это написать код, надо ведь с малого начинать чтобы мозги расшивеливать smile

Ещё задача:
Запишем треугольником числа (в n-й строке стоит n чисел n): 

2 2 
3 3 3 
4 4 4 4 
... 
Теперь выписываем их в строку сверху вниз, получаем: 1 2 2 3 3 3 4 4 4 4 .... 
Какое число стоит на К-ом месте? К-произвольно введённое пользователем число.



PM MAIL ICQ   Вверх
Dude03
Дата 17.11.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 28.4.2006

Репутация: нет
Всего: 6



Вроде бы вот так 
Код

#include <stdio.h>
int main(void)
{
    int K, n;
    scanf("%d", &K);
    for(n = 1; K > n; n++) K -= n;
    printf("%d", n);
        return 0;
}


Это сообщение отредактировал(а) Dude03 - 17.11.2006, 11:08
PM MAIL   Вверх
Sartorius
Дата 17.11.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



 Антоха,  молодец, поток полезный smile 
Вот вам еще задачка smile :
Дано три кувшина 10, 7 и 3 литра. Первый полностью заполнен молоком ... Пользуясь только этими тремя кувшинами разделить молоко пополам.

PM MAIL ICQ   Вверх
Fazil6
Дата 17.11.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: нет
Всего: 60



Цитата

Ты прав! Но не я не сразу до этого додумался например, и мне интересней чем считать это написать код, надо ведь с малого начинать чтобы мозги расшивеливать

Прежде чем бросаться программировать, задачу нужно тщательно продумать.
PM MAIL   Вверх
Антоха
Дата 17.11.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.11.2006
Где: Новосибирск

Репутация: нет
Всего: нет



Цитата(Sartorius @  17.11.2006,  11:15 Найти цитируемый пост)

Дано три кувшина 10, 7 и 3 литра. Первый полностью заполнен молоком ... Пользуясь только этими тремя кувшинами разделить молоко пополам.

Не понял маленько. Т.е. добиться чтобы в первом кувшине осталось 5 литров?! Или чтобы в каждом было ровно по половине?

Цитата(Fazil6 @  17.11.2006,  12:00 Найти цитируемый пост)
Прежде чем бросаться программировать, задачу нужно тщательно продумать. 

Хороший совет, спасибо, так и буду делать. Не судите строго, ведь учусь только. А к советам всегда прислушиваюсь!

Вот ещё задачка:
Несколько кружков разных размеров уложены друг на друга, образуя башню. Башня стоит на одном из трех полей. Задача- переставить ее на другое поле. 

user posted image

Но просто переставлять башню неинтересно-никакой задачи тут нет. Чтобы задание было не таким простым, нужны какике-то правила. Вот они:
  
1). Кружки переставляются с одного поля на другое, при этом их укладывают друг на друга, так что получаются маленькие башни. Нельзя откладывать кружки в сторону или ставить один кружок вместо другого.
2).При каждом ходе двигается только один кружок. Нельзя переносить несколько кружков одновременно.
3).Нельзя брать кружок из середины башни.
4) Запрещено класть больший кружок на меньший. 

PM MAIL ICQ   Вверх
Антоха
Дата 26.11.2006, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.11.2006
Где: Новосибирск

Репутация: нет
Всего: нет



Квадратный корень
Ограничение времени: 1.0 секунды
Ограничение памяти: 16 МБ


Число x называется квадратным корнем числа a по модулю n (root (a, n)) тогда и только тогда когда 

x * x = a (mod n) 
Напишите программу, которая находит все значения квадратных корней числа a по модулю n. 

Исходные данные
В первой строке находится одно число K – количество тестов (K <= 100000). 
Каждая следующая строка представляет собой отдельный тест, который содержит два числа – a и n (a, n – натуральные, 1 <= a, n <= 32767, n простое, a и n – взаимно простые).

Результат
Для каждого теста программа должна вычислить все возможные значения root (a, n) в диапазоне (0,n-1) и вывести их в возрастающем порядке в одной строке, разделяя одним пробелом. Если для текущего теста корней не существует, программа должна вывести в отдельной строке сообщение ‘No root’.

Пример исходных данных
5
4 17
3 7
2 7
14 31
10007 20011

Пример результата
2 15
No root
3 4
13 18
5382 14629


PM MAIL ICQ   Вверх
Антоха
Дата 27.11.2006, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.11.2006
Где: Новосибирск

Репутация: нет
Всего: нет



Когда Вито Маретти пишет важное письмо, он его шифрует. Не очень надежным методом, но достаточным для того, чтобы ни один детектив не понял ни слова. Шефу полиции такое положение дел очень не нравится. Он хочет взломать шифр Вито и обещает забыть о всех Ваших грехах, если Вы сделаете это для него. Детективы расскажут Вам, как устроен шифр. 

В шифре каждое слово шифруется отдельно. Рассмотрим шифрование на примере слов, состоящих только из строчных латинских букв. 

В начале каждая буква заменяется соответствующим ей числом: a на 0, b на 1, c на 2, ..., z на 25. После этого к первому числу добавляется 5, ко второму числу добавляется первое число, к третьему — второе и т.д. После этого если какое-то число превосходит 25, то оно заменяется остатком от деления этого числа на 26. И, наконец, числа обратно заменяются буквами. 

Зашифруем слово secret: 

Шаг 0.   s   e   c   r   e   t
Шаг 1.   18  4   2   17  4   19
Шаг 2.   23  27  29  46  50  69
Шаг 3.   23  1   3   20  24  17
Шаг 4.   x   b   d   u   y   r


В итоге получилось слово xbduyr. 

Исходные данные
Дано зашифрованное слово, состоящее из строчных латинских букв, длиной не более 100 символов. 

Результат
Выведите исходное слово. 

Пример исходных данных
xbduyr

Пример результата
secret



Это сообщение отредактировал(а) Антоха - 27.11.2006, 00:13
PM MAIL ICQ   Вверх
ivashkanet
Дата 30.11.2006, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: нет
Всего: 149



Цитата(Антоха @  17.11.2006,  01:05 Найти цитируемый пост)
Запишем треугольником числа (в n-й строке стоит n чисел n): 

2 2 
3 3 3 
4 4 4 4 
... 
Теперь выписываем их в строку сверху вниз, получаем: 1 2 2 3 3 3 4 4 4 4 .... 
Какое число стоит на К-ом месте? К-произвольно введённое пользователем число.

Математика:
n-ая цифра начинается с n(n-1)/2 +1 месте (можете проверить)

Осталось в целых числах решить неравенство:
n(n-1)/2 +1 <= k < n(n+1)/2 +1
Решаем и получаем, что
 n принадлежит [(-1 + sqrt(1+8k))/2 ; (1 + sqrt(1+8k))/2)


PM MAIL WWW ICQ   Вверх
SelenIT
Дата 4.12.2006, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 4
Всего: 401



Цитата(Антоха @  17.11.2006,  00:16 Найти цитируемый пост)
Задача №2(посложнее):
Два города А и В находятся на расстоянии 300 км друг от друга.Из этих городов 
одновременно выезжают друг другу навстречу 2 велосипедиста и едут,не останавливаясь, 
cо скоростью 50 км/ч .... и так продолжалось до тех пор пока велосипедисты не 
встретились. 
Сколько километров пролетела муха?

Велосипедисты сближаются со скоростью 100 км/ч (терминаторы, не иначе;), поэтому встретятся они через 300/100 = 3 часа после старта, стало быть, муха, вне зависимости от ее траектории, налетает к этому моменту 3*100 = 300 км.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
AligatorV
Дата 5.12.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Ученые астрономы, сообщили правительство, что ровно через T секунд на
планете Олимпиада начнется метеоритный дождь. Правительство планеты срочно
начало эвакуацию людей и
важного оборудования - телескопических установок.
Для защиты телескопу его нужно транспортировать в специально отведенное
место - хранилище. В одном хранилище может вместиться лишь один телескоп.
Необходимо рассчитать максимальное количество телескопов которые можно
успеть спрятать к началу метеоритного дождя.

Входные данные (файл METEOR.DAT):
В первой строке число T - количество секунд через которую метеориты
упадут на планету.
Во второй строке число N - количество телескопов.
В третьей строке находится 2*N чисел - координаты телескопов (x, в)
В четвертой строке число M - количество хранилищ.
В пятой строке находится 2*M чисел - координаты хранилищ (x, в)
В шестой строке число V - скорость транспортировки телескопов.

Примечание:
0<T<1000000 ; 0<N,M<100 ; -30000 <= x,y <=30000 ; 0<V<1000
T, N, M, x, в - цели.

Выходные даны: (файл METEOR.SOL):
В единственную строку файла записать максимальное количество телескопов,
которые могут быть спрятанные к началу падения метеоритов.


Пример METEOR.DAT:
10
4
1 7 3 7 5 7 100 100
2
2 7 4 7
0.1

Пример METEOR.SOL:
2
PM MAIL ICQ   Вверх
AligatorV
Дата 6.12.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 20.11.2006

Репутация: нет
Всего: нет



Взрывное устройство, которое было заложено неизвестным террористом, имеет N - лампочек, и M - переключателей.
Каждый переключатель изменяет состояние некоторых лампочек на противоположный. Для обезвреживания бомбы, необходимо выключить все лампочки.
Напишите программу, которая спасет мир.

Входные данные: (файл BOMBA.DAT):
В первой строке число N. (0<N<=100)
Во второй строке содержится N чисел, которые помечают состояние каждой лампочки (0 - выключенная, 1 - включенная).
В третьей строке содержится число M. (0<M<=100)
В каждом из следующих M строк содержится число K (количество лампочек состояние которых изменяет данный переключатель) и K чисел - номера соответствующих лампочек.
Выходные даны: (файл BOMBA.SOL):
Если бомбу обезвредить невозможно, запишите в исходный файл "NO" (без кавычек).
Если возможно спасти мир, то в первую строку запишите "YES" (без кавычек), а во вторую строку запишите номера переключателей которые необходимо задействовать.
Пример BOMBA.DAT:
5
0 1 1 0 1
4
3 2 3 4
3 1 4 5
2 4 5
2 2 4
PM MAIL ICQ   Вверх
korob2001
Дата 6.12.2006, 02:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: нет
Всего: 61



Извиняюсь, я тут немного измеил условие, не в свою пользу. Только прозьба не обижаться, я не хочу никого обидеть, особенно автора этой задачи, очень интересная задача. Я лишь попытался усовершенствовать как условие, так и решение.

1. Отказался от данных первой и третьей строки, так как счёл их лишними. Насколько я понял, то первая строка содержит кол-во перключателей, что легко вычесляется программно таким образом:
Код

length(join("",split(/\s+/,$line)));

но и это не понадобилось, для решения данной задачи.

2. Если третий параметр - это общее кол-во вариантов разминирования, то это тоже не нужный параметр, так как код ниже пометит предложением  - YES, все варианты которые подошли для разминирования, не в зависимости от того, насколько много варинтов в файле, пусть даже 50GB и никогда не убъёт оперативную память, лишь бы хватило дискового пространства.

3. Что бы не уничтожать данные в файле, я решил сохранять результаты в отдельный файл, с таким же именем + окончание ".temp", т.е. "bomba.dat.temp". Если кому-то понадобится всёже перезаписывать исходный файл "bomba.dat", достаточно раскоментировать последние 2 строки.

Мой файл "bomba.dat" выглядет так:
Код

0 1 1 0 1
3 2 3 4
3 1 4 5
2 4 5
2 2 4
2 3 5
1 5 1 3 2

где первая строка - это переключатели бомбы, а все остальные (их может быть сколько угодно) - предлагаемые варианты разминирования.

Вот код:
Код

#!/usr/bin/perl
my $file = "./bomba.dat";
my(@bomb,@temp,$i) = ();

open my $fh, "<", "$file" or die "Can't open file '$file': $!\n";
open my $wh, ">", "$file.temp" or die "Can't open file '$file.temp': $!\n";
flock($wh,2);
@bomb=split(/\s+/,$_=<$fh>);
while (<$fh>) {
      chomp;
      @temp = @bomb;
      for my$p(split(/\s+/)){splice(@temp,$p-1,1,$temp[$p-1]?0:1)};
      $_.=(join('',@temp)+0)?" - NO":" - YES";
      print $wh "$_\n";
}
close($wh);
close($fh);
#unlink($file) or warn "Can't remove file '$file': $!\n";
#rename("$file.temp",$file) or warn "Can't rename file '$file.temp' to '$file': $!\n";

Здесь так же обрабатываются ошибки, потому код выглядит немного объёмным.

PS: На выходе у меня получился такой результат:
Код

3 2 3 4 - NO
3 1 4 5 - NO
2 4 5 - NO
2 2 4 - NO
2 3 5 - YES
1 5 1 3 2 - YES


Это сообщение отредактировал(а) korob2001 - 6.12.2006, 03:37


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Baltazar5000
Дата 6.12.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 6.12.2006

Репутация: нет
Всего: нет



!!!ПРОГРАММА НА C++!!!
Найти наименьший номер элемента последовательности, для которого выполняется условие b < E.
Вывести на экран этот номер и все элементы, где i=1,2,3,...n.
a(энное)=(a(энное)-1)/(n^2+1)
b=/a(энное)-a(энное-1)/
a(1)=5.1
E=10^-7
!!!!!Решить, используя циклы While или For или Do while или все вместе!!!!!
!!!ПРОГРАММА НА C++!!!
Срочно помогите написать.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема »


 




[ Время генерации скрипта: 0.0910 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.