Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
DominQ
0 / 0 / 0
Регистрация: 06.10.2015
Сообщений: 20
#1

Отсортировать двумерный массив по убыванию простых чисел - C++

06.10.2015, 06:12. Просмотров 359. Ответов 8
Метки нет (Все метки)

Нужно отсортировать двумерный массив по количеству простых чисел в нем по убыванию. Сколько не пытался , сортирует как то кривовато.
http://www.cyberforum.ru/cpp-beginners/thread1732386.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2015, 06:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Отсортировать двумерный массив по убыванию простых чисел (C++):

Дан массив действительных чисел A[10]. Отсортировать по убыванию.
Дан массив действительных чисел A. Отсортировать по убыванию. За ранее...

Отсортировать одномерный массив действительных чисел методом пузырька (по убыванию)
Отсортировать одномерный массив действительных чисел методом пузырька (по...

Cгенерировать одномерный массив из 10 чисел,отсортировать его по возрастанию или убыванию
Суть собственно в чем, я полный чайник и задача мне нужна написанная самым...

Отсортировать динамически созданный массив случайных чисел по убыванию с помощью функции
Динамически создать массив размера n (n вводится с клавиатуры) и заполнить его...

Дан массив из N целых чисел. Отсортировать его по убыванию элементов методом пузырька
Дан массив из N целых чисел. Отсортировать его по убыванию элементов методом...

8
Пытливый Ум
20 / 20 / 16
Регистрация: 04.06.2015
Сообщений: 126
06.10.2015, 08:19 #2
А что из себя представляет двумерный массив? Два столбца? Две строчки?
Что за данные в нём? Наборы чисел?
Сортировка внутри строк (столбцов) или как?
Условие сформулировано так себе
0
DominQ
0 / 0 / 0
Регистрация: 06.10.2015
Сообщений: 20
06.10.2015, 08:36  [ТС] #3
Дана целочисленная прямоугольная матрица А размером N х М:

б) упорядочить строки матрицы по убыванию количества простых
чисел в них.
0
nmcf
6237 / 5549 / 2524
Регистрация: 14.04.2014
Сообщений: 23,337
06.10.2015, 08:39 #4
Где программа?
0
DominQ
0 / 0 / 0
Регистрация: 06.10.2015
Сообщений: 20
06.10.2015, 08:52  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
 
using namespace std;
int main(){
    setlocale(LC_CTYPE, "Russian");
    const int N = 10, M = 10;
    int a[N][M], i, j, q = 0, c = 2;
    int n, m;
    int z = 0;
 
    cin >> n;
    cin >> m;
    for (i = 0; i < n; i++)
    for (j = 0; j < n; j++)
        cin >> a[i][j];
    for (i = 0; i < n; i++){
        for (j = 0; j < n; j++)
            cout << a[i][j];
        cout << endl;
    }
    int s = 0;
    bool f1, f2;
    for (j = 0; j < n; j++){
        f1 = 1;
        for (i = 0; i < n; i++)
        if (a[i][j] == 0){
            f1 = 0;
            break;
        }if (f1) s++;
    }  cout << "колво столбцов без 0 " << s << endl;
    int f; int s1[N];
    for (int i = 0; i < n; i++)
    {
        s1[i] = 0; for (j = 0; j < n; j++)
        {
            f = 1;
            for (c = 2; c < a[i][j]; c++){
                if (a[i][j] % c == 0){ f = 0; break; }
            }
            if (f == 1)
                s1[i] = s1[i] + 1; 
 
        }
        
        
    }
    for (i = 0; i < n-1; i++){
        for (j = 0; j < n; j++){
        if (s1[i]<s1[i + 1])
            swap(a[i][j], a[i + 1][j]);
    }
        
    }
    for (i = 0; i < n; i++){
        for (j = 0; j < n; j++)
            cout << a[i][j];
        cout << endl;
    }
    system("pause");
    return 0;
}
на первую половину не обращайте внимания , так как она относится к другому подзаданию
меня волнует именно сортировка, психанул уже, удалил все свои дороботки до нуля, ну вот код
0
nmcf
6237 / 5549 / 2524
Регистрация: 14.04.2014
Сообщений: 23,337
06.10.2015, 10:13 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int b[N], k;
bool f;
 
for (i = 0; i < n; i++)
{
    b[i] = 0;
    for (j = 0; j < m; j++)
    {
        f = true;
        for (k = 2; k <= a[i][j] / 2; ++k)
            if (a[i][j] % k == 0)
            {
                f = false;
                break;
            }
        if (f) ++b[i];
    }
}
 
int tmp[M];
    for(i = 0; i < n - 1; ++i)
    {            
        for(j = 0; j < n - 1; ++j)
        {     
            if (b[j + 1] > b[j]) 
            {
                std::swap(b[j + 1], b[j]);
                std::copy(a[j + 1], a[j + 1] + m, tmp);
                std::copy(a[j], a[j] + m, a[j + 1]);
                std::copy(tmp, tmp + m, a[j]);
            }
        }
    }
0
Пытливый Ум
20 / 20 / 16
Регистрация: 04.06.2015
Сообщений: 126
06.10.2015, 15:15 #7
вот мой вариант. тут остались отладочные функции для вывода и проверки
сортировка примитивная - пузырьком. проверка на простоту тоже не идеальная. было бы больше инфы о входных параметрах, можно было бы оптимизировать
Код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <ctime>
 
int n, m;
int **mas = new int* [n];
 
// Заполнение ячеек массива рандомами
void EnterMas()
{
    for(int i = 0; i < n; i++)
    {
        mas[i] = new int[m];
        for(int j = m; j--; mas[i][j] = rand() % 10) {}
    }
}
 
// Вывод массива
void PrintMas()
{
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {std::cout << mas[i][j] << " ";}
        std::cout << std::endl;
    }
}
 
// Проверка числа (ячейки массива) на простоту
bool IsPrime(int iCheckNum)
{
    // если меньше двух - не простое
    if(iCheckNum < 2) { return 0; }
    // если два - простое
    if(iCheckNum == 2) { return 1; }
    // если чётное и больше двух - не простое
    if((iCheckNum & 0x01) == 0) { return 0; }
    // если нечётное, проверка на делимость на все нечётные
    for(int i = 3; i <= sqrt((double) iCheckNum); i += 2)
    { if((iCheckNum % i) == 0) { return 0; } }
    return 1;
}
 
// Подсчёт количества простых чисел в строке
int PrimesCount(int iStrNum)
{
    int iPrimeCount = 0;
    for(int i = m; i--;)
    { iPrimeCount += IsPrime(mas[iStrNum][i]); }
    return iPrimeCount;
}
 
// Непосредственно сортировка
void StrSort()
{
    int *mPrimesCount = new int[n];
    for(int i = n; i--; )
    { mPrimesCount[i] = PrimesCount(i); }
 
    int *tmp, temp;
    for(int i = 1; i < n; i++)
    {
        for(int j = i; j > 0; j--)
        {
            if(mPrimesCount[j - 1] < mPrimesCount[j])
            {
                tmp = mas[j - 1];
                mas[j - 1] = mas[j];
                mas[j] = tmp;
 
                temp = mPrimesCount[j - 1];
                mPrimesCount[j - 1] = mPrimesCount[j];
                mPrimesCount[j] = temp;
            }
        }
    }
}
 
int main()
{
    std::cin >> n >> m;
    srand(unsigned(time(NULL)));
    EnterMas();
    PrintMas();
 
    StrSort();
 
    std::cout << std::endl;
    PrintMas();
    return 0;
}
0
DominQ
0 / 0 / 0
Регистрация: 06.10.2015
Сообщений: 20
06.10.2015, 19:03  [ТС] #8
std::swap(b[j + 1], b[j]);
std::copy(a[j + 1], a[j + 1] + m, tmp);
std::copy(a[j], a[j] + m, a[j + 1]);
std::copy(tmp, tmp + m, a[j]);

а теперь объясните мне , что делает этот копи?)
просто в универе еще этого не проходили

а вообще лучше полностью объясните мне принцип работы такой сортировки)
0
nmcf
6237 / 5549 / 2524
Регистрация: 14.04.2014
Сообщений: 23,337
06.10.2015, 19:32 #9
Это сортировка пузырьком. std::copy() просто копирует строки массива. std::swap() обменивает значения.
b - массив, содержащий количество простых чисел для соответствующей строки.
0
06.10.2015, 19:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2015, 19:32
Привет! Вот еще темы с решениями:

Отсортировать массив по убыванию, затем добавить недостающий элемент и отсортировать массив по возрастанию
2) В массиве a ...a встречаются по одному разу все целые числа от 0 до n, кроме...

Получить из исходного массива массив отрицательных чисел и отсортировать его по убыванию методом выбора
Дан массив из N целых чисел. Получить из него массив отрицательных чисел и...

Интервал простых чисел и сортировка по убыванию
Из заданного интервала вывести все числа по убыванию.Границы интервала задаются...

Создать одномерный массив, заполнить его случайными значениями, отсортировать массив по убыванию
создать одномерный массив, заполнить его случайными значениями, отсортировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru