0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 1
1

Помогите с олимпиадной задачкой (

19.06.2008, 20:43. Показов 1474. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дали мне на написание отчета олимпиадную задачку.. Решение на пару строк.. Пару раз уже код переписывал ниче не получаетсо.. Максимум выводит одно правильное число .. Вот условие :


Инверсия. Пускай P{p1,…,pn} является перестановкой чисел 1, 2,..., п. Таблицей инверсий перестановки Р называют последовательность Т{t1,…,tn} в которой t[i] равно количеству элементов перестановки Р, которые стоят (у Р) левее числа i и больших числа i. Например, для перестановки Р{5, 9, 1, 8, 2, 6, 4, 7, 3} чисел (1,2,...,9) таблица инверсий будет Т{2, 3, 6, 4, 0, 2, 2, 1, 0}.
Написать программу которая при заданой таблице инверсий возобновляет перестановку.


Мож кто поможет ? .. Решение тут на пару строк.. но вот чето не получается... =((
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2008, 20:43
Ответы с готовыми решениями:

Помогите с Задачкой
1. Реализовать функцию нахождения всех простых чисел в диапазоне от 1 до 101. Сгенерированные числа...

Помогите с задачкой на С++
Посоветывали обратиться тут....задали в УНивере такую задачу, а я даже не имею представления как ее...

помогите с задачкой((
в программирование 0, а задачу позарез решить надо в cи++. Народ, помогите! :'( даны n ( n max =...

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

1
Эксперт С++
2255 / 770 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
20.06.2008, 13:48 2
Лучший ответ Сообщение было отмечено как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <conio.h>
int main () {
    int * P,*T,n,i,j,k,l,t;
    printf("enter length : " ) ;
    scanf("%d",&n);
    P = new int[n];
    T = new int[n];
    printf("input inversion array : ");
    for(i=0;i<n;i++) {
        scanf("%d",&T[i]);
        P[i]=i+1;
    };
    for(i=0;i<n;i++) {
        for(j=0;j<n;j++) if(P[j]==i+1) break;
        k = T[i];
        l=0;
        while(P[l]<P[j]) l++;
        while(k>0) {
            if(P[l]>=P[j])k--;
            while(P[++l]<P[j]);
        };
        t= P[j];
        P[j]=P[l];
        P[l]=t;
    };
    printf("\n");
    for(i=0;i<n;i++) printf("%d ",P[i]);
    while(!kbhit());
    return 0;
};
[/code]Добавлено через 1 минуту
Суть решения проста : расставлять циферки начиная с младшей подряд.
На каждом шаге мы знаем,что меньшие цифры стоят на своих местах,а на остальных может быть либа текущая либо большая.Прокручиваем нужное количество свободных мест и ставим на следующее текущую.Все.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2008, 13:48
Помогаю со студенческими работами здесь

Помогите с задачкой, пожалуйста. (С++)
Вообщем, программирование только началось, а вопросов куча :\ Помогите, если есть у кого-нибудь...

Помогите с простой задачкой.
Есть код: #include &lt;stdio.h&gt; int main() { int x=2; int y; int z; x*=3+2;...

Помогите с действительно простой задачкой.
Дан код: /* Conditional expressions */ #include &lt;stdio.h&gt; #include &lt;iostream&gt; int main() {...

помогите с задачкой
дано натуральное семизначное число n. определить встречается ли в нем заданная цифра A. если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru