Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Вопросы по задачам на С++ (http://forum.oszone.net/showthread.php?t=218215)

Prof 17-10-2011 21:12 1775623

Вопросы по задачам на С++
 
Доброго времени суток, ув. форумчане! Создал себе отдельную тему так как прогнозирую решать много задачек на С++ ;)
Подскажите, как реализовать такую задачку, ато чтото никак не могу допереть:

Условие
Пусть 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 1775684

Цитата:

Цитата Prof
как прогнозирую решать много задачек на С++ »

крут, вот только ожидает тебя сюрприз, на этом форуме решать для тебя будешь только ты
по сути - где попытки собственного решения?

Prof 17-10-2011 22:20 1775692

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

lxa85 17-10-2011 22:59 1775720

Prof, как вы правильно выразились,
Цитата:

Цитата Prof
я прошу только идею и прекрасно понимаю что готовенькое ждать не стоит »

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

Prof 20-10-2011 17:11 1777899

Сделал через сортировку, то есть сколько раз переставило соседние числа, столько и нарушений. Осталось только перевести из 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 1779564

Ещё один вопрос. Есть такая программка для переведения из 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 1779581

Prof, а можно спросить?
а вот это
Цитата:

Цитата Prof
void p() »

что такое?
Конкретно вот это:
void ? Что це за зверь?

Prof 23-10-2011 12:07 1779798

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

ferget 23-10-2011 12:36 1779825

Цитата:

Цитата Prof
_tmain(c=110); »

особенно понравилось

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

lxa85 23-10-2011 13:27 1779855

Цитата:

Цитата Prof
насколько понимаю это спецификатор типа который не возвращает значения »

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

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

ratorses 25-10-2011 11:47 1781196

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

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


Время: 20:47.

Время: 20:47.
© OSzone.net 2001-