Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Задача на массив 
:(
    Опции темы
Tanzilit
Дата 29.11.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.5.2006

Репутация: 0
Всего: 1



Здравствуйте господа программисты! Огромная просьба помочь решить! Есть задача:
дано - массив целых,положительных,ограниченных сверху чисел.Определить наиболее часто встречающуюся подряд тройку чисел
Желательно на C или C++

PM MAIL   Вверх
orthrus
Дата 29.11.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 400
Регистрация: 30.10.2007
Где: г. Усть-Илимск(Ир кутская обл.)

Репутация: 5
Всего: 16



Вот протестируй:

Код

#include "iostream.h"
#include "conio.h"

int main(int argc,char* argv[])
{
 int arr_size = 40;
 int *array = new int[arr_size];
 int border = 3;
 
 std::randomize();
 int max = 0;
 for (int i = 0; i<arr_size; ++i) {
     array[i] = std::random(border);
     max = std::max(max,array[i]);
     std::cout << array[i] << " ";
 }
 std::cout << std::endl;

 int *arr_border = new int[max + 1];
 memset(arr_border,0,sizeof(int)*(max + 1));

 for (int i = 0; i<(arr_size - 1); ++i) {
     int j = 0;
     while ((array[i] == array[i + 1]) && (2 != j) && (i<arr_size)) {++j;++i;}
     if (2 == j) {arr_border[array[i]]++;}
 }

 int tmp = 0, j = -1;
 for (int i = 0; i<max + 1; ++i) {
     if (tmp < arr_border[i]){
        tmp = arr_border[i];
        j = i;
     }
 }
 if (-1 == j) {std::cout << "Троек не найдено" << std::endl;}
 else std::cout << j << " - " << "встречается чаще всего" << std::endl;
 getch();
 return 0;
}




--------------------
У того, кто ничего не делает, всегда много помощников.© Л.Н. Толстой
user posted image
PM MAIL ICQ   Вверх
Mihhail
Дата 29.11.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.9.2007

Репутация: 1
Всего: 9



Код
#include<stdio.h>
#include<mem.h>
#include<stdlib.h>

#define MAX 8     //Ограничивающее число
#define MAXMS 1024 //Размер массива

void main()
{
   int i, i1, i2, j, n1, n2, n3;
   int ms[MAXMS], //Наш массив
       kms[MAX][MAX][MAX]; //Массив под комбинации

   //Обнуляем массив
   memset( kms, 0, MAX * MAX * MAX * sizeof(int) );

   //Заполняем массив случайным образом в указанных пределах
   randomize( );
   for( i = 0; i < MAXMS; i ++ )
      ms[i] = random( MAX );

   //Ищем кол-во каждой комбинации
   for( i = 0; i < MAXMS; i += 3 ){
      if( i + 2 > MAXMS ) break;
      kms[ms[i]][ms[i + 1]][ms[i + 2]] ++;
      }

   //Ищем наиболие встречающуюся комбинацию
   for( j = 0, i = 0; i < MAX; i ++ )
      for( i1 = 0; i1 < MAX; i1 ++ )
         for( i2 = 0; i2 < MAX; i2 ++ )
            if( j < kms[i][i1][i2] ){
               j = kms[i][i1][i2];
               n1 = i;
               n2 = i1;
               n3 = i2;
               }

   //Теперь n1 n2 n3 - искомая тройка чисел встречается j раз
   printf( "%d %d %d - %d", n1, n2, n3, j );
}


Если у тебя дана какая то определённая последовательность для массива чисел просто выкинешь заполнение его случайными значениями.
PM MAIL WWW   Вверх
Tanzilit
Дата 29.11.2007, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.5.2006

Репутация: 0
Всего: 1



Эх спасибо вам огромное.Очень помогли!
Сейчас потестю,заодно разберусь и изучу как все сделано
PM MAIL   Вверх
Dov
Дата 30.11.2007, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Mihhail, этот цикл,
Код
   //Ищем кол-во каждой комбинации
   for( i = 0; i < MAXMS; i += 3 ){
      if( i + 2 > MAXMS ) break;
      kms[ms[i]][ms[i + 1]][ms[i + 2]] ++;
      }
 
 по-моему, должен выглядеть как-то так:
Код
    //Ищем кол-во каждой комбинации
    for(i = 0; i < MAXMS - 2; i++)
        kms[ms[i]][ms[i + 1]][ms[i + 2]] ++;

иначе, если будет, к примеру, такой массив: ...3, 1, 1, 1, 1, 6.., то посчитает не правильно. А в этом случае ответ должен быть 2.
 
p.s. Могу ошибиться.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Mihhail
Дата 30.11.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.9.2007

Репутация: 1
Всего: 9



Dov,  это мы немного по разному задание поняли. Как я понял, то если три числа посчитаны то они отбрасываются все сразу. А последние одна или две "лишние" цифры, в этом случае, уже не образуют тройку так что и считать их нет надобности.  Но такие "лишние" цифры в идеальных условиях домашних заданий врят ли могут появиться, ИМХО, и условие i + 2 > MAXMS так на всякий случай.
  Но возможно ты и прав, в том что нужно считать все тройки чисел, независимо входило ли число в другую группу или нет!?...  smile

Это сообщение отредактировал(а) Mihhail - 30.11.2007, 12:17
PM MAIL WWW   Вверх
Tanzilit
Дата 30.11.2007, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.5.2006

Репутация: 0
Всего: 1



снова здравствуйте товарищи! Огромное спасибо за то что не поленились  потратить свое время на помощь
сегодня все изучу и протестю.Но есть небольшая проблема...Сегодня еще раз прочел задание,там помимо решения есть пункт
2)метематическое и словарное обоснование алгоритма
Честно говоря я не до конца понял как это сделать.Может подскажете?
Ну хотябы примрено набросайте плизз что нить по этой теме или подскажите как это сделать(может сам допру)
Заранее thanx
PM MAIL   Вверх
Tanzilit
Дата 3.12.2007, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.5.2006

Репутация: 0
Всего: 1



ну или хоть плиз обьясните что значит "словесное и математическое обоснование алгоритма"
словесное обоснование - это типо описать работу программы? ну тогда все ясно но что значит математическое обоснование?
PM MAIL   Вверх
Tanzilit
Дата 5.12.2007, 03:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.5.2006

Репутация: 0
Всего: 1



в общем я уточнил
необходимо описание алгоритма проги и желательно формула ее работы(математическая форма)
еще нужно "зависимость числа значащих операций"
далее таблица
размерность массива\колличество операций
помогите плиз!
послеэ того тему можно будет в принципе пометить как выполненную
PM MAIL   Вверх
Tanzilit
Дата 7.12.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.5.2006

Репутация: 0
Всего: 1



вот обдумываю вс еэто дело
Mihhail
на какой версии си написано? я пока тестил только на досовском Borland c++ 3,1(другие просто не установлены на данный момент) вроде нет ошибок и компилится,но чет он создается(экзешник) и ничгео не выдает.то есть при нажатии Alt-f5 (вроде так) ниче не выводится
наврено надо на другой версии си тестить
и еще - опишите плиз словами работу алгоритма (просто в задании етсь пункт такой - словесное и математическое описание алгоритма),буду благодарен

Это сообщение отредактировал(а) Tanzilit - 7.12.2007, 01:24
PM MAIL   Вверх
Tanzilit
Дата 7.12.2007, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.5.2006

Репутация: 0
Всего: 1



ну и еще вопрос уже ко всем - нужно начертить таблицу по типу
размерность массива| колл-во операций
то етсь грубо говоря отследить,как меняется колличество операций при изменении размерности массива
честно говоря е не знаю даже с чего начать,подскажите плиз как сделать

                                  
PM MAIL   Вверх
Tanzilit
Дата 12.12.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 16.5.2006

Репутация: 0
Всего: 1



Снова здравствуйте в общем вот вроде чуть чуть вариант Михаила переделал:
Код
#include<stdio.h>
#include<mem.h>
#include<stdlib.h>

#define MAX 4 //ogranihevauhee 4islo
#define MAXMS 256 //Razmer Massiva

void main()
{
int i, i1, i2, j, n1, n2, n3;
int ms[MAXMS], //Our Massive
kms[MAX][MAX][MAX]; //massiv pod kombinazii

//obnulaem massive
memset( kms, 0, MAX * MAX * MAX * sizeof(int) );

//zapolnaem massive slu4aynim obrazom v ukazannih predelax
randomize( );
for( i = 0; i < MAXMS; i ++ )
ms[i] = random( MAX );

//ishem koll-vo kajdoi kombinazii
for( i = 0; i < MAXMS; i += 3 ){
if( i + 2 > MAXMS ) break;
kms[ms[i]][ms[i + 1]][ms[i + 2]] ++;
}

//ishem naibolee vstre4aushuusa kombinaziu
int count = 0; //***
for( j = 0, i = 0; i < MAX; i ++ )
for( i1 = 0; i1 < MAX; i1 ++ )
for( i2 = 0; i2 < MAX; i2 ++ )
{
count++;       //***
if( j < kms[i][i1][i2] )
{
j = kms[i][i1][i2];
n1 = i;
n2 = i1;
n3 = i2;
}
}
for( i = 0; i < MAXMS; i++ )
printf(" %d ", ms[i]);
printf("Razmernost massiva = %d\nkoll-vo operaciy = %d\n",MAXMS,count); //***
//teper n1 n2 n3 - iskomaya troika 4isel vstre4aushayasaя j raz
printf( "%d %d %d - %d", n1, n2, n3, j );
}

Коментарии на латинском тк сдаваться это дело будет в досовском си
просьба
1) проверить работоспособность в соответствии с условием(1 пост темы)
2) проверить верно ли считает колличество операций(как я понял от размерности массива  оно не зависит а зависит от ограничивающего числа)
кстати еще вопрос возник - а что данная прога выведет если троек не будет найдено? видимо какой то бред наврно надо подправить...
еще раз спасибо всем кто помогал
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.