Суббота, 20 Апреля 2024, 16:24

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Форум игроделов » Программирование » C/C++ » Решаем задачки вместе.
Решаем задачки вместе.
ЙакудДата: Вторник, 23 Августа 2011, 19:21 | Сообщение # 21
участник
Сейчас нет на сайте
Quote (Demeron)
Вот ещё 1 задачка: Дается сумма и произведение 2 чисел. Найти эти числа.

Ну это не интересная задача совсем. Все сводится к решению квадратного уравнения из системы. Это скорее математика, чем задания по программированию

Code
// x и y даны.
(система:)
a*b = x; (1)
a+b = y; (2)

(2)
b = y-a;

(2)=>(1)
a*(y-a) = x;
a*y-sqr(a) = x;
sqr(a) - y*a + x = 0;
D = sqr((-y))-4*x;

A1 = (-y + sqrt(D))/2;
A2 = (-y - sqrt(D))/2;
B1 = y-A1;
B2 = y-A2;

Ничего сложного. Не интересно совсем.
Адаптировать данный код в си проще простого...


"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0


Сообщение отредактировал Йакуд - Вторник, 23 Августа 2011, 19:25
StageДата: Вторник, 23 Августа 2011, 19:23 | Сообщение # 22
постоянный участник
Сейчас нет на сайте
^ это xor, а не степень
ЙакудДата: Вторник, 23 Августа 2011, 19:26 | Сообщение # 23
участник
Сейчас нет на сайте
Stage, так лучше?)
Я писал не на си.. Решил математическим путем и ^ использовал для степени.. Просто эта задача совершенно не интересная... =(


"Хороший художник – копирует, гениальный – ворует!" — Pablo Picasso
.blanco 2.0
StageДата: Вторник, 23 Августа 2011, 22:21 | Сообщение # 24
постоянный участник
Сейчас нет на сайте
На императивных языках решения не слишком изящные. Тоже самое на функциональном Haskell
Code

func s p = [(x, y) | x <- [0..s], y <- [0..s], x + y == s, x * y == p]

Quote

func 8 16
Вывод: [(4,4)]

func 7 12
Вывод: [(3,4),(4,3)]
мотоблохДата: Вторник, 23 Августа 2011, 22:33 | Сообщение # 25
Придворный программист
Сейчас нет на сайте
А кто-нибудь решил мою задачу?
ТехникДата: Среда, 24 Августа 2011, 11:00 | Сообщение # 26
Глава X-ray Games
Сейчас нет на сайте
Quote (Stage)
Вот ещё 1 задачка: Дается сумма и произведение 2 чисел. Найти эти числа.

Ну это 8-9 класс "решение систем уравнений" по математике.
Вот еще одна задачка: Написать программу(консольную),реализующую процесс бронирования билетов на самолет. Допустим, общее число мест будет 50. В решении можно использовать встроенный массив,либо контейнер из STL. Принцип действия программы следующий: пользователь вводит число в диапазоне от [0..50], если это место не занято, то программа пишет "место забронировано", в противном случае "место занято". Программа перед вводом числа должна заполнить массив числами 0(не занято) и 1(занято),конечно,случайно.
DemeronДата: Среда, 24 Августа 2011, 11:44 | Сообщение # 27
User created in C++
Сейчас нет на сайте
Quote (Техник)
Вот еще одна задачка: Написать программу(консольную),реализующую процесс бронирования билетов на самолет. Допустим, общее число мест будет 50. В решении можно использовать встроенный массив,либо контейнер из STL. Принцип действия программы следующий: пользователь вводит число в диапазоне от [0..50], если это место не занято, то программа пишет "место забронировано", в противном случае "место занято". Программа перед вводом числа должна заполнить массив числами 0(не занято) и 1(занято),конечно,случайно.

пффф... та это вообще самые азы...

Code

#include <windows.h>
#include <iostream>

int mesta[50];
int mesto;

int main()
{
  for (int i=0;i<50;i++)
  mesta[i]=rand()%2;

  std::cin>>mesto;

  if (mesta[mesto]==1) printf("mesto zanato!\n"); else printf("mesto svobodno!\n");

  system("pause"); //для того что бы увидеть ответ

  return 0;
}

Добавлено (24.08.2011, 11:44)
---------------------------------------------
Предлагаю сделать так: Если кто-то решил задачку, то ему ставит плюс тот, кто задал задачу.

ТехникДата: Среда, 24 Августа 2011, 15:22 | Сообщение # 28
Глава X-ray Games
Сейчас нет на сайте
Quote (Demeron)
Предлагаю сделать так: Если кто-то решил задачку, то ему ставит плюс тот, кто задал задачу.

Ну давайте тогда и задачки будем придумывать по-сложнее.
Stas96Дата: Среда, 24 Августа 2011, 19:45 | Сообщение # 29
Programmer and Game Designer
Сейчас нет на сайте
Quote (Техник)
Вот еще одна задачка: Написать программу(консольную),реализующую процесс бронирования билетов на самолет. Допустим, общее число мест будет 50. В решении можно использовать встроенный массив,либо контейнер из STL. Принцип действия программы следующий: пользователь вводит число в диапазоне от [0..50], если это место не занято, то программа пишет "место забронировано", в противном случае "место занято". Программа перед вводом числа должна заполнить массив числами 0(не занято) и 1(занято),конечно,случайно.

Вот мое решение, тоже самое что и у Demeron, только вместо if else, использую ? :.
Code
#include <iostream>   

using namespace std;

int mesta[50];   
int mesto;   

int main()   
{   
    for (int i = 0 ;i < 50; i++)   

    mesta[i]=rand()%2;   

    cin >> mesto;   

    (mesta[mesto]==1) ? cout << "mesto zanato!\n" << endl : cout << "mesto svobodno!\n"<< endl;   

    system("pause"); //для того что бы увидеть ответ   

    return 0;   
}


Сообщение отредактировал Stas96 - Среда, 24 Августа 2011, 19:45
zodiakДата: Среда, 24 Августа 2011, 22:29 | Сообщение # 30
постоянный участник
Сейчас нет на сайте
Че за детские задачи.
Вот вам задание.
Написать максимально быструю генерацию и сортировку массива состоящего из 100000 элементов типа int.
Несколько условий:
1. Массив генерится рандомом, начальное значение генератора у всех должно быть одно, например 12345.
2. Время генерации и сортировки засекать функцией timeGetTime().

Quote (Demeron)
Предлагаю сделать так: Если кто-то решил задачку, то ему ставит плюс тот, кто задал задачу.

Давайте отмечать плюсом лучший вариант.

Также можно устанавливать время на решение, например на мою задачку до воскресения.

зы: Попробовал написать код и изменил условия. Не миллион а 100 тысяч.
Мой текущий код генерит массив на 10 милисекунд а сортирует за 201 секунду.


Точка зору окремо взятого індивіда завжди суб'єктивна!

Взломщик
Battle City.Net


Сообщение отредактировал zodiak - Среда, 24 Августа 2011, 22:53
KornivalДата: Четверг, 25 Августа 2011, 04:05 | Сообщение # 31
The Witcher
Сейчас нет на сайте
Quote (zodiak)
Написать максимально быструю генерацию и сортировку массива состоящего из 100000 элементов типа int.

Алгоритмы сортировки известны, никакого творческого подхода здесь не требуется. Как-то неинтересно строчить одно и то же в тридцатый раз dry Неужели никто не даст нормальную задачку...
zodiakДата: Четверг, 25 Августа 2011, 10:46 | Сообщение # 32
постоянный участник
Сейчас нет на сайте
Kornival,
То, что алгоритм известен ничего не значит, его еще нужно реализовать, причем самым быстрым способом. Решая задачу кто-то сделает это в первый раз.

Выше я привел замеры в режиме отладки. В релизе цифры другие: 3 милисек генерация и 50 сек сортировка.
Сортировку я немного улучшил и сейчас она занимает 30 секунд.

Добавлено (25.08.2011, 10:46)
---------------------------------------------
Значительно ускорил время генерации массива, сейчас она равна 0 миллисекунд. Как получить микросекунды?


Точка зору окремо взятого індивіда завжди суб'єктивна!

Взломщик
Battle City.Net
DemeronДата: Четверг, 25 Августа 2011, 11:16 | Сообщение # 33
User created in C++
Сейчас нет на сайте
Quote (zodiak)
Давайте отмечать плюсом лучший вариант.

Лучше 1 правильный и самый быстрый.
Quote (zodiak)
Также можно устанавливать время на решение

На разных процессорах скорость выполнения разная.
KornivalДата: Четверг, 25 Августа 2011, 15:24 | Сообщение # 34
The Witcher
Сейчас нет на сайте
Quote (zodiak)
Как получить микросекунды?

QueryPerfomance
PesetsДата: Суббота, 27 Августа 2011, 01:11 | Сообщение # 35
постоянный участник
Сейчас нет на сайте
Проходил мимо, вот что вспомнил... где-то с год назад мне дали линк на одну довольно интересную задачку. Щас расскажу.
Вам нужно написать программу, которая управляет стеками. То есть, ей подаются команды добавить-удалить, а она, собссно, добавляет-удаляет. Стеков до 1000.

В качестве входных данных программа принимает следующий файл:
В первой строчке число - N количество операций. 0 < N <= 100000
В каждой следующей строчке находится описание операции. Операции бывают двух типов:
PUSH A B - добавить в стек A (1 <= A <= 1000) целое число B (0 <= B <= 10^9)
POP A - убрать вершину стека A
Соответственно, входной файл будет выглядеть примерно так:
Code
7
PUSH 1 100
PUSH 1 200
PUSH 2 300
PUSH 2 400
POP 2
POP 1
POP 2


После выполнения каждой POP операции программа должна вывести в выходной файл какое число она убрала с вершины стека. То есть, для входного файла описанного выше ответ будет таким:
Code
400
200
300


Вот. Казалось бы, что такого? Задача простейшая... но! Программа должна использовать не более 750Кб оперативки и работать не дольше 1с.
Я ломал голову весь вечер, но нашел-таки такое решение, которое удовлетворяло обоим ограничениям. Интересно, кто-нибудь еще сможет?)



KornivalДата: Суббота, 27 Августа 2011, 02:54 | Сообщение # 36
The Witcher
Сейчас нет на сайте
Решал чуть меньше часа, за производительностью особо не гнался, пожалуйста замерь и дай знать если не справился с каким-нибудь из условий. Вот код:
Code

   #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>

   #define PUSH 0
   #define POP  1

   FILE *input;
   FILE *output;

   class stack
   {
        public:
            stack() {_iterator = 10000;}
            void push(int x);
            int pop();
        private:
            int _data[10000];
            int _iterator;
   };
   stack *my_stack;
   struct task
   {
        int _task;
        int _stack_number;
        int _value;
   };
task current_task;
   void stack::push(int x)
   {
        if(_iterator)
        {
            _iterator--;
            _data[_iterator] = x;
        }
   }

   int stack::pop()
   {
        int ret_value;
        if(_iterator < 10000)
        {
            ret_value = _data[_iterator];
            _iterator++;
        }
        return ret_value;
   }

   void get_task(char *str)
   {

        char *p;
        //первая лексема-действие которое необходимо выполнит
        p = strtok(str, " ");
        if(!strcmp(p,"PUSH"))   current_task._task = PUSH;
        else current_task._task = POP;

        //вторая лексема-номер задействованного стека
        p = strtok('\0'," ");
        current_task._stack_number = atoi(p) - 1;

        //третья лексема-значение, которое должно быть записано в стек(если PUSH)
        p = strtok('\0'," ");
        if(current_task._task == PUSH)
        current_task._value = atoi(p);

   }

   void perform_task()
   {
        char buffer[30];
        if(current_task._task == PUSH)
        {
            my_stack[current_task._stack_number].push(current_task._value);
            return;
        }
        else
        {
            itoa(my_stack[current_task._stack_number].pop(),buffer,10);
            fputs(buffer,output);
            fputc('\n',output);
            printf("%s\n",buffer);
        }

   }

   int main()
   {
        int num_of_operations;

        char buffer[30];
        input = fopen("input.txt","r");
        output = fopen("output.txt","w");
        //количество операций == количество требуемых(максимально) стеков
        num_of_operations = atoi(fgets(buffer,sizeof(buffer),input));
        my_stack = new stack[num_of_operations];

        while(fgets(buffer,sizeof(buffer),input))
        {
            get_task(buffer);
            perform_task();
        }
        itoa(my_stack[1].pop(),buffer,10);

        return 0;
   }



Сообщение отредактировал Kornival - Суббота, 27 Августа 2011, 03:22
PesetsДата: Суббота, 27 Августа 2011, 03:05 | Сообщение # 37
постоянный участник
Сейчас нет на сайте
Code
b1bae136-b6a5-4516-ae7b-66f18dfa10a1
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(24) : error C2380: type(s) preceding 'task' (constructor with return type, or illegal redefinition of current class-name?)
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(35) : error C2274: 'function-style cast' : illegal as right side of '.' operator
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(36) : error C2274: 'function-style cast' : illegal as right side of '.' operator
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(44) : error C2274: 'function-style cast' : illegal as right side of '.' operator
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(70) : error C2084: function 'void get_task(char *)' already has a body
          b1bae136-b6a5-4516-ae7b-66f18dfa10a1(29) : see previous definition of 'get_task'
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(75) : error C2274: 'function-style cast' : illegal as right side of '.' operator
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(76) : error C2274: 'function-style cast' : illegal as right side of '.' operator
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(84) : error C2274: 'function-style cast' : illegal as right side of '.' operator
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(92) : error C2274: 'function-style cast' : illegal as right side of '.' operator
b1bae136-b6a5-4516-ae7b-66f18dfa10a1(120) : error C3861: 'get_task': identifier not found


PS Я бы дописал, но все-таки это твоя прога)

Добавлено (27.08.2011, 03:05)
---------------------------------------------
PPS Прога скорее всего завалится, тк в стеке может быть макс 10 000 элементов, а за 100 000 операций можно положить 100 000 элементов в один стек





Сообщение отредактировал Pesets - Суббота, 27 Августа 2011, 03:01
KornivalДата: Суббота, 27 Августа 2011, 03:06 | Сообщение # 38
The Witcher
Сейчас нет на сайте
У меня в кодеблокс нормально собирается? У тебя VC++?
PesetsДата: Суббота, 27 Августа 2011, 03:08 | Сообщение # 39
постоянный участник
Сейчас нет на сайте
Не у меня. У тестирующей системы. По стандарту писать надо. И itoa у тебя не по POSIX'у
И по-моему у нее там gcc





Сообщение отредактировал Pesets - Суббота, 27 Августа 2011, 03:08
KornivalДата: Суббота, 27 Августа 2011, 03:11 | Сообщение # 40
The Witcher
Сейчас нет на сайте
Quote (Pesets)
а за 100 000 операций можно положить 100 000 элементов в один стек

Всмысле завалится? 100 000-максимальное количество операций, а значит и максимально количество элементов во всех стеках.

Добавлено (27.08.2011, 03:11)
---------------------------------------------
У меня gcc прекрасано собирает, сейчас посмотрю что можно сделать.

Форум игроделов » Программирование » C/C++ » Решаем задачки вместе.
  • Страница 2 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг