1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

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

Тема в разделе "Вопросы новичков и не только", создана пользователем dkgC, 5 дек 2012.

  1. dkgC

    dkgC Гость

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

    Как это реализовать - понимаю не очень :lol:
    Прошу помощи, камрады!
    Код:
    #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

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

    dkgC Гость

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

    rrrFer Гость

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

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



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

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

    dkgC Гость

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

    rrrFer Гость

    Репутация:
    0
    Код:
    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;
    }
    Добавлено: или второй варьянт:
    Код:
    bool isEasy(int val) {
    for (int i = sqrt(val); i > 1; --i) 
    if (0 == val % i) 
    return false;
    return true;
    }
    Код:
    //..
    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]);
     
Загрузка...

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