Войти

Показать полную графическую версию : Вопросы по задачам на С++


Prof
17-10-2011, 21:12
Доброго времени суток, ув. форумчане! Создал себе отдельную тему так как прогнозирую решать много задачек на С++ ;)
Подскажите, как реализовать такую задачку, ато чтото никак не могу допереть:

Условие
Пусть n — любое натуральное число, а последовательность i1, i2, ... , in сожержит все натуральные числа от 1 до n включительно. Нарушением порядка в такой последовательности называют систему таких двух неравенств, что оправдываются: j < k и ij > ik. Если последовательность возрастает, то количество нарушений порядка равно 0. Если последовательность спадает, то такое количество равно n(n – 1)/2. Во всех остальных случаях это количество расположена между указанными величинами.

Задание
Установите четность количества нарушений порядка последовательности.

Входящие данные
В первой строке входного файла указано количество последовательностей m. Каждый из следующих m строк содержит натуральное число n и последовательность различных натуральных чисел от 1 до n включительно: i1, i2, ... , in при 2 ≤ m ≤ 100, 2 ≤ n ≤ 1 048 576. У 50 % тестов n ≤ 4096.

Исходящие данные
Единственная строка выходного файла должна содержать число в шестнадцатеричной системе счисления, соответствующее двоичному числу которое образовано из m символов - нулей или единиц - без пробела: k-й символ строки - это остаток от деления на 2 числа нарушений порядка k-й последовательности, заданной (k + 1)-й строкой входного файла.

Пример
input.dat:
5
3 1 2 3
3 2 3 1
3 1 3 2
4 2 3 4 1
4 3 4 1 2
output.sol:
6
Объяснение: (00110)2 = (6)16

Hector
17-10-2011, 22:14
как прогнозирую решать много задачек на С++ »
крут, вот только ожидает тебя сюрприз, на этом форуме решать для тебя будешь только ты
по сути - где попытки собственного решения?

Prof
17-10-2011, 22:20
Hector, я и не прошу уже готовое решение, я прошу только идею и прекрасно понимаю что готовенькое ждать не стоит
я вобщето планирую только спрашивать то что непонятно, а не трубить "Помогите! Сделайте!"
а тему создал, потомучто как писалось выше "прогнозирую решать много задачек на С++" и на каждную мелочь по задачке- отдельная тема? только буду засорять форум.
я не понимаю, почему Вы так сразу категорично настроены против меня, я же не прошу уже готовые коды решений

lxa85
17-10-2011, 22:59
Prof, как вы правильно выразились, я прошу только идею и прекрасно понимаю что готовенькое ждать не стоит »
Только идей ждем мы. Или идей, или попыток решить, или рассуждений вслух. Схемок, чертежей, всего чего угодно, помимо "голого" исходного задания.
--
Почитай, поразмышлял. В чем возникла проблема?
Задача в достаточной степени линейна. Надо только внимательно отнестись к переменным,и правильно понять, что ожидается на выходе. Все необходимое расписано уже в условии.
--
А кстати, ради интереса. Попробуй составить алгоритм используя "нарезку слов и цитат" из задания.

Prof
20-10-2011, 17:11
Сделал через сортировку, то есть сколько раз переставило соседние числа, столько и нарушений. Осталось только перевести из dec в hex.
Двоичный код получаю вот таким циклом:
for(i=1;i<=y;i++)
сout<<b[i];
Каким образом результат этого цикла можно занести в одну переменную?

Updated: сделал, кому интересно:
for(i=y;i>=1;i--)
{
s=s+b[i]*c;
c=c*10;
}

Prof
22-10-2011, 22:24
Ещё один вопрос. Есть такая программка для переведения из 2 системы счисления в 16:
#include <stdio.h>
#include <conio.h>
int main ()
{
char c;
int result=0;
while(scanf("%c",&c) ) {
if( (c<'0') || (c > '1') ) break;
result<<=1;
result+=c-'0';
};
printf("\n%d",result);
}

Но мне надо что б переменная не вписывалась с клавиатуры, а бралась из кода. Пробовал переписать, получилось чтото такое (нерабочее):

#include <stdio.h>
#include <iostream>
using namespace std;
char c;
int result=0;
int _tmain (char c)
{
while(c!=0) {
if( (c<'0') || (c > '1') ) break;
result<<=1;
result+=c-'0';
};
}
void p()
{
_tmain(c=110);
cout<<result;
}

lxa85
22-10-2011, 22:55
Prof, а можно спросить?
а вот это void p() »
что такое?
Конкретно вот это:
void ? Что це за зверь?

Prof
23-10-2011, 12:07
lxa85, я конечно чайник, но насколько понимаю это спецификатор типа который не возвращает значения (не требует return).

ferget
23-10-2011, 12:36
_tmain(c=110); » особенно понравилось

скачайте учебник для начинающих

lxa85
23-10-2011, 13:27
насколько понимаю это спецификатор типа который не возвращает значения »
И что из этого следует?
В каком месте программы мы должны получить результат?
----
Посмотрел на код еще раз. Я его не понимаю, чисто зрительно в нем есть ошибка.
Какие-то resultы, какие-то _tmain, циклы while вообще не понятно что делает.
Как это все вообще должно работать?

Prof, перепиши еще раз, с принятыми нормами обозначения и с соблюдением логики выполнения.
В противном случае тебе придется расписывать логику выполнения в комментариях, т.к. сейчас, понять какая переменная куда и зачем отправляется я не могу.

ratorses
25-10-2011, 11:47
Ребят помогите пожалуйста ,модуль пишу только задали,у кого -то код такой ?
v
v
v
v
"Определение матрицы смежности графа по заданной матрице инцидентности"

или кто-то делал такую прогу
код ужен очень




© OSzone.net 2001-2012