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

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

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

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


Инверсия. Пускай 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
Эксперт С++
2254 / 769 / 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 - 2022, CyberForum.ru