Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2015, 15:33   #1
Promi
Пользователь
 
Регистрация: 02.07.2015
Сообщений: 33
По умолчанию Найти количество строк, похожих на первую строку данной матрицы

Дана целочисленная матрица размера M x N, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими, если совпадают множества чисел, встречающихся в этих строках. Найти количество строк, похожих на первую строку данной матрицы

Последний раз редактировалось Promi; 02.07.2015 в 15:37.
Promi вне форума Ответить с цитированием
Старый 02.07.2015, 15:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
совпадают множества чисел, встречающихся в этих строках.
Пример такой матрицы привести можешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.07.2015, 15:57   #3
Promi
Пользователь
 
Регистрация: 02.07.2015
Сообщений: 33
По умолчанию

например , исходная матрица:
3 5 2 1
1 2 3 0
5 1 2 3
тут количество строк, похожих на первую=1
Promi вне форума Ответить с цитированием
Старый 02.07.2015, 16:15   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Хм.... Ничего кроме такого в голову не приходит:
Функция проверки строк:
Код:
bool chk(int x,int y){
 int q[m],w[m],i,j,n;
 for(i=0;i<m;i++) {q[i]=a[y][i]; w[i]=a[x][i];}
 for(i=0;i<m;i++) for(j=0;j<m;j++) {
   if(w[i]<w[j]){n=w[i];w[i]=w[j];w[j]=w[i];} 
   if(q[i]<q[j]){n=q[i];q[i]=q[j];q[j]=q[i];} 
 }

 for(i=0;i<m;i++) {if(q[i]!=w[i]) return false};
 return true;
}
Соответственно:
Код:
 const int m=10,n=10;
 int a[n][m],i,j,cnt=0;
 for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]);
 for(i=1;i<n;i++)  cnt+=(chk(0,i))?1:0;
 printf("%d",cnt); getchar();
Это конечно не самый хороший код, но в качестве идеи (сортировать строки, а потом их сравнивать отсортированными) думаю подойдет.

самое лучшее решение: Вычислить контрольную сумму строк и их уже сверять.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.07.2015, 16:32   #5
Promi
Пользователь
 
Регистрация: 02.07.2015
Сообщений: 33
По умолчанию

Вот эту программу ни как исправить нельзя?
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h> 
#include<iostream>
#include<ctime>
#include <algorithm>
 
using namespace std;
const int nmax=20;
main()
{	
    int N,M,otvet,k,temp,count = 0;
     
    int a[100][100]; 
    printf("N=");scanf("%d",&N);
    printf("M=");scanf("%d",&M);
    for (int i=0; i<N; i++)
        for (int j=0; j<M; j++)
        {
            printf("a[%d][%d]=",i+1,j+1);
            scanf("%d",&a[i][j]);            
        }
        for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
           printf("%4d",a[i][j], " ");
        }
        printf("\n");
    }
    otvet=0;
    for(int i = 1; i < N; i++)
    {
        temp = 0;
 
        for(int k = 0; k < M; k++)
            for(int j = 0; j < M ;j++)
                if(a[i][j] == a [1][k])
                {
                    temp ++;
                }
            if(temp > (M/2))
                    count ++;
    }
 
    cout << count << " - Количество строк, похожих на первую." << endl;

getch();
}

Последний раз редактировалось Stilet; 02.07.2015 в 16:39.
Promi вне форума Ответить с цитированием
Старый 02.07.2015, 16:45   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Во-первых: Первый элемент в Си имеет индекс 0 а не 1. Во-вторых я чет потерялся, я не могу понять как она работает. Ты считаешь количество совпадающего с элементом проходя по строке, а дальше что?

Сложно как-то получается, я бы эту прогу выкинул и написал либо как выше сортировкой, либо разобрался бы и применил один из алгоритмов вычисления контрольной суммы. Другого выходя не вижу, может форумчане еще чего подскажут. У нас есть хорошие аналитики, Рома][а к примеру. Или Серега Близнюков или Неверов Женя, они пожалуй поумнее меня в делах алгоритмических.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.07.2015, 16:58   #7
Promi
Пользователь
 
Регистрация: 02.07.2015
Сообщений: 33
По умолчанию

спасибо), надеюсь что-нибудь еще подскажут
Promi вне форума Ответить с цитированием
Старый 02.07.2015, 17:01   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Хорошо бы. Удачи )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
матрицы: Найти произведение элементов матрицы mхn, удовлетворяющих условию А[i,j]<=2, и количество неотрицательных (QBasic) eescad Помощь студентам 1 04.12.2013 17:41
Найти ошибку в коде (Для данной целочисленной матрицы размером n*m найти матрицу из 0 и 1...) код на C camel5 Помощь студентам 1 26.11.2013 06:11
Определить количество строк в максимальном множестве попарно непохожих строк заданной матрицы Cи/С++ FleXt Помощь студентам 12 17.12.2012 14:42
Найти последовательность действительных чисел,получающихся при чтении данной матрицы по СПИРАЛИ. anta Общие вопросы C/C++ 17 02.06.2009 18:07
Матрица A состоит из 8 строк и 6 столбцов. вычесть из всех её строк, начиная со второй, первую строку Dimak24 Помощь студентам 1 19.12.2008 15:45