IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Возрастающая последовательность, помогите плз с идеями, с кодом справлюсь...
bioh
сообщение 15.03.2007 9:33
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Задача такая:
Из данного массива удалите 4 таких элемента, чтобы оставшиеся элементы оброзовывали строго возрастающую последовательность

Т.пример: 5,2,8,10,9,14,20,18,23,48,30,32
Отредактированный массив: 5,8,10,14,20,23,30,32
Удаленные элементы: 2,9,18,48

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

Помогите пожалуйста с идеей, буду очень благодарен.

Заранее всем спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
volvo
сообщение 15.03.2007 9:38
Сообщение #2


Гость






Цитата
Препод сказал, что последовательность может быть любая, а удалить надо только четыре элемента.
Тогда попроси у него вот из такой последовательности:
10, 9, 8, 7, 6, 5, 4, 3, 2, 1

удалить ровно 4 элемента, чтобы она стала строго возрастающей...
 К началу страницы 
+ Ответить 
bioh
сообщение 15.03.2007 9:43
Сообщение #3





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Я понимаю, что условие звучит глупо, но я все-таки думаю, что здесь предпологаеться последовательность из которой надо удалить 4 эл-та и она станет возрастающей

Добавлено через 7 мин.
Лично у меня напрашиваеться только одно решение:
поочередное сравнение пары элементов, если a[i]>a[i+1], то запомнить, его номер и потом удалить.

Нам столько много обьясняют, о том что решение задачи должно быть универсально, а не подогнано под тэстовый пример, и такие задачи дают (
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.03.2007 9:52
Сообщение #4


Гость






Вообще-то решение задач такого типа описано вот тут: http://algolist.manual.ru/olimp/rec_sol.php#a20

(сама задача - здесь: http://algolist.manual.ru/olimp/rec_prb.php под номером 20)
 К началу страницы 
+ Ответить 
bioh
сообщение 15.03.2007 10:01
Сообщение #5





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Огромное спасибо

Решение накрученное, в динамическом програмировании ничего не понимаю, но все равно огромное спасибо !
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
bioh
сообщение 17.03.2007 10:35
Сообщение #6





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Помоги плз, у меня ничего не вышло
Наверное нужен, совершенно другой подход, нежели этот
Код
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
int _tmain(int argc, _TCHAR* argv[])
{
    const int xMax=12, yMax=4;
    int x[xMax]={5,2,8,10,9,14,20,18,23,48,30,32};
    int y[yMax],r[xMax],i,j,k;
    //for (i=0;i<xMax;i++)
    //{
    //    printf("enter value fo x[%d] =",i+1);
    //    scanf("%d",&x[i]);
    //}
    for (i=0;i<xMax;i++) printf("X[%d] = %d\n",i+1,x[i]);
    j=0;k=0;i=0;
    if (x[i]>x[i+1] && x[i]>x[i+2]) {y[j]=i;j++;k++;}
    for (i=1;i<xMax-1;i++)
    {
        if (x[i]<x[i-1] && x[i]<x[i+1] && x[i-1]<x[i+1]) {y[j]=i;j++;k++;};
    }
    if (x[i]<x[i-1] && x[i]<x[i-2]) {y[j]=i;j++;k++;}
    printf("K = %d\n",k);
    for (j=0;j<k;j++) printf("Y[%d] = %d\n",j+1,y[j]);
    for (j=0;j<k;j++) printf("X for delete[%d] = %d\n",j,x[y[j]]);
    int s=0;
    int flag;
    for (i=0;i<xMax;i++)
        {
            flag=0;
            if (y[0]!=i && y[1]!=i && y[2]!=i && y[3]!=i) {r[s]=x[i];flag=1;}
        if (flag!=0) s++;
        }
    for (i=0;i<(xMax-k);i++) printf("R[%d] = %d\n",i+1,r[i]);    
    getch();
    return 0;
}

По задумке препода, должны быть исключены числа : 2,9,18,48 под номерами: 1,4,7,10 соответственно

читал http://algolist.manual.ru/olimp/rec_prb.php, не помогло, не понял.
Буду очень благодарен, если подскажете, как это можно сделать попроще

Сообщение отредактировано: bioh - 17.03.2007 10:55
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 10:15
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"