Форум программистов, компьютерный форум CyberForum.ru

Прога не всегда работает правильно.. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ не открывается фаил http://www.cyberforum.ru/cpp-beginners/thread229915.html
#include<stdio.h> #include<conio.h> #include<malloc.h> #include<string.h> #include<iostream> using namespace std; struct queue { char disk_name;
C++ Как задать точность округления в среде разработки? Недавно столкнулся с тем, что любая переменная вещественного типа при инициализации и выводе этой же переменной на экран отображается лишь с шестью знаками. К примеру, если присвоить х = 10900.0905, то на экран выведется 10900.1 Интереса ради, завел переменную y=10900 и вычел ее из x (все переменные типа float). И, что бы вы думали, получилось? z=x-y = 0.0908203 Хотя результат уже почему-то до 6... http://www.cyberforum.ru/cpp-beginners/thread229903.html
C++ Рекурсия: Написать функцию умножения двух чисел, используя только операцию сложения
Написать функцию умножения двух чисел, используя только операцию сложения. (помогите с решением)
прога для интерпретации #define C++
надо реализовать простой препроцессор языка С, способный выполнять замены в тексте, заданные с помощью директивы #define (в том числе нерекурсивные макросы)
C++ в чём ошибка http://www.cyberforum.ru/cpp-beginners/thread229893.html
void load_file (queue *q) { char path; int count=0; system("cls"); printf ("\nVvedite put', imja i rashirenie faila\n"); scanf ("%s", &path); fa=fopen(path,"r"); for (int i=1;i<=counter;i++) {
C++ перебор подмножеств подскажите, пожалуйста, как сделать перебор подмножеств? это для решения задачки http://acm.timus.ru/problem.aspx?space=1&num=1005 подробнее

Показать сообщение отдельно
opax
0 / 0 / 0
Регистрация: 29.03.2010
Сообщений: 21

Прога не всегда работает правильно.. - C++

17.01.2011, 09:33. Просмотров 577. Ответов 6
Метки (Все метки)

Задача: Построить максимальное множество, состоящее из попарно не сравнимых векторов v. Векторы v определяются парами чисел, выбираемые из данной последовательности чисел а1, ..аn , n>=1. Два вектора v=(а,в) и v'=(а',в') называются сравнимыми, если а<=а' и в<=в' или а>=а' и в>= в', в противном случае не сравнимыми.

Псевдокод:
Пусть числа a[1], ..a[n] расположены в порядке неубывания (если это не так, то просто отсортируем массив). Будем выписывать искомые векторы v[1], ..следующим образом:

Пусть k - номер формируемого сейчас вектора.

Положим сначала индекс i первого элемента формируемого сейчас вектора v[k] равным 1, а индекс второго элемента j=N.
k:=0;
пока (i<j)>,a[j]);
полагаем i:=i+1; j:=j-1; {переходим к следующим элементам}
если v[k]=(a,a[j])
то пусть количество оставшихся в массиве A элементов справа
от а[i-1], равных a[i-1], есть u, т.е. a=a[i+1]=...=a[i+u],
а количество оставшихся в массиве A элементов слева от а[j+1],
равных a[j+1], есть v, т.е.
a[j]=a[j-1]=...=a[j-v].
если u>=v
то, так как мы стремимся получить максимальное число пар,
то мы отбросим все оставшиеся элементы со значением a[j]
и положим j:=j-v-1
иначе по аналогичной причине отбросим все оставшиеся элементы
со значением a, т.е. положим i:=i+u+1;
конец_если
конец_если
конец_пока
КОД С++

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
void qs(int *items, int left, int right)//быстрая сортировка - по неубыванию
{
register int i, j;
char x, y;
 
i = left; j = right;
x = items[(left+right)/2];
 
do {
while((items[i] < x) && (i < right)) i++;
while((x < items[j]) && (j > left)) j--;
if(i <= j) {
y = items[i];
items[i] = items[j];
items[j] = y;
i++; j--;}} while(i <= j);
if(left < j) qs(items, left, j);
if(i < right) qs(items, i, right);
}
void quick(int *items, int count)
{qs(items, 0, count-1);}
 
 
 
int main(int argc, char *argv[])
{
 
int a[500],n,l,i,j,u,v,k,N,g,h;
pair <int,int> vec[500];
cout<<"Vvedite kolichestvo elementov posledovatel'nosti:"<<endl;
cin>>n;
 
cout<<"Vvedite elementi posledovatel'nosti:"<<endl;
for (l=0;l<n;l++){
cin>>a[l];} //вводим последовательность
cout<<endl;
quick(a,n); //сортируем по неубыванию
 
k=0; i=0; j=n-1; u=0; v=0;
 
while (i<j){k++;
vec[k].first=a[i];
vec[k].second=a[j];
i++;j--;
if (a[i-1]==a[i]) {u++;}
if (a[j]==a[j+1]) {v++;}}
if (u>=v){j=j-v-1;} else {i=i+u+1;}
 
for (l=1;l<=k;l++){
cout<<vec[l].first<<" "<<vec[l].second<<endl;}
 
system("PAUSE");
return EXIT_SUCCESS;
}
Добавлено через 9 часов 32 минуты
подскажите.. там с U и V у меня проблемы.. не могу понять до конца как работает.. я так понял если в последовательности есть одинаковые элементы после сортировки он их перешагивает..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru