Двумерные Массивы И Структуры

Тема в разделе "C/C++/C#", создана пользователем dkgC, 5 дек 2012.

  1. dkgC

    dkgC Гость

    Язык выполнения - СИ. Задание таково, что нужно определить пару матриц с наибольшим кол-вом простых чисел отличных друг от друга на 2 (типа : 5 7). Я так понял, что числа должны быть расположены как-то так [0][0] [0][1]. [0][1] [0][2] (это я привел пример с индексами) и т.д.
    Все, до чего я допер, это вот этот код, ввод кол-ва структур, имен матриц и размерностей их, ну и заполнение естесно.
    Как я понял, алгоритм выполнения следующий:
    1. Проходим по каждой матрице циклом и ищем есть ли там вообще простые числа (типа как-то matr[j]%2==1) и если есть flag=1. Если нету - break и выход из программы.
    2. Проходим по каждой матрице циклом и находим разность между разность между элементами. Хотя вот тут опять придется эти эл-ты проверять на простое/непростое. Ну и вроде если она равна 2 - то ставим на счетчик k++.
    3. Выводим название пар матриц с наиб. вот такими числами отличающихся на два.

    Как это реализовать - понимаю не очень :lol:
    Прошу помощи, камрады!
    Код (C++):
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>


    typedef struct table {
    char *name;
    int **matr;
    } Tables;

    int main()
    {
    int T, N, M;
    int i, j, h;
    Tables *table;
    printf("Enter the T (number of structures):");
    scanf("%d", &T);
    table = (Tables *)malloc(T * sizeof(Tables));
    printf ("\nEnter the N (the size of the matrix):");
    scanf("%d", &N);
    for (int k = 0; k < T; k++) {
    printf ("\nEnter the name of the %d-th matrix - ", k+1);
    table[k].name=(char *)malloc(10 * sizeof(char));
    scanf("%s", table[k].name);
    printf ("\nEnter the elements of the matrix %s \n",table[k].name);
    table[k].matr=(int **)malloc(N*sizeof(int *));
    for (int i = 0; i < N; i++) {
    table[k].matr[i]=(int *)malloc(N * sizeof(int));
    for (int j = 0; j < N; j++) {
    printf ("%s[%d][%d]= ", table[k].name, i, j);
    scanf ("%d", &table[k].matr[i][j]);
    }  
    }
    }
    getch();
    }
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    бред и в описании задания
    и в описании алгоритма
     
  3. dkgC

    dkgC Гость

    Два простых числа называются «близнецами», если они отличаются друг от друга на
    2(например, числа 5 и 7). Определить пару матриц с наибольшим количеством
    «близнецов». вот пруф
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    напиши функцию поиска простого числа в заданным значением в матрице и все будет тривиально.

    МОжет не совсем правильно, но когда ты найдешь число 7 - то будешь искать в матрице числа 5 и 9, число 9 ты не найдешь в любом случае, т.к. функция ищет простое число(сначала проверяет на простоту, потом ищет).



    Правильно это делать я думаю так:
    выбираешь в std::set из матрицы все числа (повторяющиеся числа при этом отсеятся автоматически, а также, числа автоматически будут упорядочены.

    Обходишь set и сравниваешь разницу каждого числа со следующим (если -2 - увеличиваешь счетчик)
     
  5. dkgC

    dkgC Гость

    Таки да, спасибо, но сложность в том, что моих знаний для этого не достаточно :lol:
     
  6. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    bool f(int val, int **a, int n, int m) {
    for (int i = sqrt(val); i > 1; --i) if (0 == val % i) return false;
    for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
    if (a[i][j] == val) return true;
    return false;
    }
    Добавлено: или второй варьянт:
    Код (Text):
    bool isEasy(int val) {
    for (int i = sqrt(val); i > 1; --i)
    if (0 == val % i)
    return false;
    return true;
    }
    Код (Text):
    //..
    std::set<int> set_;
    for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
    if(isEasy(a[i][j])
    set_.insert(a[i][j]);
     
Загрузка...
Похожие Темы - Двумерные Массивы Структуры
  1. Rpp
    Ответов:
    1
    Просмотров:
    807
  2. Малгано
    Ответов:
    0
    Просмотров:
    1.287
  3. 203
    Ответов:
    12
    Просмотров:
    2.447
  4. SchwarzeWolfin
    Ответов:
    3
    Просмотров:
    2.499
  5. Искушенный
    Ответов:
    0
    Просмотров:
    427

Поделиться этой страницей