Форум программистов, компьютерный форум CyberForum.ru

Как решается эта сложная задача - C++

Восстановить пароль Регистрация
 
Fox01
3 / 3 / 0
Регистрация: 04.03.2012
Сообщений: 55
05.03.2012, 21:00     Как решается эта сложная задача #1
Как решить?
Если у массива А(40) есть элемент, равный В, то отсортировать элементы, находящиеся после него по убыванию сортировкой отбором.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.03.2012, 21:06     Как решается эта сложная задача #2
Fox01, А если у массива есть несколько элементов равных B, то сортировать после самого последнего или самого первого ?
Fox01
3 / 3 / 0
Регистрация: 04.03.2012
Сообщений: 55
05.03.2012, 21:08  [ТС]     Как решается эта сложная задача #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Fox01, А если у массива есть несколько элементов равных B, то сортировать после самого последнего или самого первого ?
думаю с первого
Fox01
3 / 3 / 0
Регистрация: 04.03.2012
Сообщений: 55
05.03.2012, 21:12  [ТС]     Как решается эта сложная задача #4
Цитата Сообщение от Fox01 Посмотреть сообщение
думаю с первого
А как по Вашему лучше сделать? или ввод массива в ручную делать?
у меня есть исходник
как его можно подредактировать под мою? помогите пожалуйста - очень прошу

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
//Сортировка отбором
 
#include <iostream>
#include <iomanip>
 
//прототип функции, выводящей массив на экран
void print(int[], int);
using namespace std;
 
int main()
{
 
    //определяем переменные
    const int size = 10;
    int array[size] = { 35, 12, 7, 8, 47, 98, 5, 56, 17, 83};
    int min, index, temp;
 
    //выводим исходный (неотсортированный) массив на экран
    cout << "Nosorted array: " << endl;
    print(array, size);
 
    //начинаем сортировать
    //цикл проходов
    for (int i = 0; i < size - 1; i++)
    {
 
        //задаем начальные значения
        min = array[i];
        index = i;
 
        //цикл перебора элементов массива
        for (int j = i; j < size; j++)
        {
 
            //находим минимальный элемент
            if (min > array[j])
            {
 
                //запоминаем минимальный элемент и его индекс
                min = array[j];
                index = j;
 
            }
 
        }
 
        //меняем элементы массива местами
        temp = array[i];
        array[i] = array[index];
        array[index] = temp;
 
    }
 
    //выводим отсортированный массив на экран
    cout << "Sorted array: " << endl;
    print(array, size);
 
    return 0;
 
}
 
//функция, печатающая массив
void print (int a[], int sizeOfArray)
{
 
    for (int i = 0; i < sizeOfArray; i++)
 
        cout << setw(4) << a[i];
 
    cout << endl << endl;
 
}
 Комментарий модератора 
Используйте теги форматирования кода!
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
05.03.2012, 21:14     Как решается эта сложная задача #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
int* FindValue(int* arr, unsigned arrSize, int value)
{
  // тут ищем первое value и возвращаем указатель на него или NULL
}
 
void SortArray(int* arr, unsigned arrSize)
{
  // тут сортировка массива заданного размера
}
 
int main()
{
 
  int arr[] = {...}; //  заданный массив
  const unsigned arrSize = sizeof(arr) / sizeof(*arr);
  int* firstB = FindValue(arr, arrSize, B);
  if (firstB != 0)
  {
     const unsigned firstBIndex = firstB - arr;
     SortArray(firstB, arraySize - firstBIndex);
  }
  PrintArray(arr);
 
  return 0;
}
Fox01
3 / 3 / 0
Регистрация: 04.03.2012
Сообщений: 55
05.03.2012, 21:21  [ТС]     Как решается эта сложная задача #6
Цитата Сообщение от DU Посмотреть сообщение
Вот в полупсевдокоде как-то так:

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
int* FindValue(int* arr, unsigned arrSize, int value)
{
  // тут ищем первое value и возвращаем указатель на него или NULL
}
 
void SortArray(int* arr, unsigned arrSize)
{
  // тут сортировка массива заданного размера
}
 
int main()
{
 
  int arr[] = {...}; //  заданный массив
  const unsigned arrSize = sizeof(arr) / sizeof(*arr);
  int* firstB = FindValue(arr, arrSize, B);
  if (firstB != 0)
  {
     const unsigned firstBIndex = firstB - arr;
     SortArray(firstB, arraySize - firstBIndex);
  }
  PrintArray(arr);
 
  return 0;
}
а можно пожалуйста всю программу показать, а то я новичок...пока сложновато для меня...
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
05.03.2012, 21:22     Как решается эта сложная задача #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
#include <iostream>
 #include <iomanip>
 
 //прототип функции, выводящей массив на экран
 void print(int[], int);
 using namespace std;
 
 int main()
 {
 
 //определяем переменные
 const int size = 10;
 int array[size] = { 35, 12, 7, 8, 47, 98, 5, 56, 17, 83};
 int max, j, temp, B;
 
 //выводим исходный (неотсортированный) массив на экран
 cout << "Nosorted array: " << endl;
 print(array, size);
 
 cout<<"B = ";
 cin>>B;
 
 //начинаем сортировать
 //цикл проходов
 for (int i = 0; i < size -1; i++)
 {
 
     if(array[i]==B)
     {
         i++;        
         for(; i<size-1; i++)
         {
             max=i;
             for(j=i+1; j<size; j++)
                 if(array[max]>array[j])
                     max=j;
             temp=array[i]; array[i]=array[max]; array[max]=temp;
         }       
     }
 }
 
 
 //выводим отсортированный массив на экран
 cout << "Sorted array: " << endl;
 print(array, size);
 
 return 0;
 
 }
 
 //функция, печатающая массив
 void print (int a[], int sizeOfArray)
 {
 
 for (int i = 0; i < sizeOfArray; i++)
 
 cout << setw(4) << a[i];
 
 cout << endl << endl;
 
 }
Fox01
3 / 3 / 0
Регистрация: 04.03.2012
Сообщений: 55
05.03.2012, 21:28  [ТС]     Как решается эта сложная задача #8
Цитата Сообщение от valeriikozlov Посмотреть сообщение
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>
 #include <iomanip>
 
 //прототип функции, выводящей массив на экран
 void print(int[], int);
 using namespace std;
 
 int main()
 {
 
 //определяем переменные
 const int size = 10;
 int array[size] = { 35, 12, 7, 8, 47, 98, 5, 56, 17, 83};
 int max, j, temp, B;
 
 //выводим исходный (неотсортированный) массив на экран
 cout << "Nosorted array: " << endl;
 print(array, size);
 
 cout<<"B = ";
 cin>>B;
 
 //начинаем сортировать
 //цикл проходов
 for (int i = 0; i < size -1; i++)
 {
 
     if(array[i]==B)
     {
         i++;        
         for(; i<size-1; i++)
         {
             max=i;
             for(j=i+1; j<size; j++)
                 if(array[max]>array[j])
                     max=j;
             temp=array[i]; array[i]=array[max]; array[max]=temp;
         }       
     }
 }
 
 
 //выводим отсортированный массив на экран
 cout << "Sorted array: " << endl;
 print(array, size);
 
 return 0;
 
 }
 
 //функция, печатающая массив
 void print (int a[], int sizeOfArray)
 {
 
 for (int i = 0; i < sizeOfArray; i++)
 
 cout << setw(4) << a[i];
 
 cout << endl << endl;
 
 }
спасибо огромнейшее Вам за оказанную помощь
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
05.03.2012, 22:14     Как решается эта сложная задача #9
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stddef.h>
 
void swap(int* a, int* b)
{
   int t = *a;
   *a = *b;
   *b = t;
}
 
int* min_element(int* first, int* last)
{  
   int* min = first++;
   while(first < last)
   {
      if(*first < *min) 
     min = first;
      ++first;
   }
 
   return min;
}
 
void selection_sort(int* first, int* last)
{
   while(first < last - 1)
   {
      swap(first, min_element(first, last));
      ++first;
   }
}
 
int* find(int* first, int* last, int value)
{
   while(first < last)
   {
      if(*first == value)
     return first;
      ++first;
   }
 
   return NULL;
}
 
#define N 40
 
int main(void)
{ 
   int b;   
   size_t i;
 
   int* val_ptr;
   int arr[N];
 
   srand(time(NULL));
 
   for(i = 0; i < N; ++i)
   {      
      arr[i] = rand() % 100;
      printf("%d ", arr[i]);
   }
 
   printf("\nB: ");
   if(scanf("%d", &b) != 1) return 1;
 
   val_ptr = find(arr, arr + N, b);
   if(val_ptr != NULL)
      selection_sort(val_ptr + 1, arr + N);
 
   for(i = 0; i < N; ++i)
      printf("%d ", arr[i]);
   putchar('\n');
 
   return 0;
}
Fox01
3 / 3 / 0
Регистрация: 04.03.2012
Сообщений: 55
12.03.2012, 22:52  [ТС]     Как решается эта сложная задача #10
Цитата Сообщение от rangerx Посмотреть сообщение
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stddef.h>
 
void swap(int* a, int* b)
{
   int t = *a;
   *a = *b;
   *b = t;
}
 
int* min_element(int* first, int* last)
{  
   int* min = first++;
   while(first < last)
   {
      if(*first < *min) 
     min = first;
      ++first;
   }
 
   return min;
}
 
void selection_sort(int* first, int* last)
{
   while(first < last - 1)
   {
      swap(first, min_element(first, last));
      ++first;
   }
}
 
int* find(int* first, int* last, int value)
{
   while(first < last)
   {
      if(*first == value)
     return first;
      ++first;
   }
 
   return NULL;
}
 
#define N 40
 
int main(void)
{ 
   int b;   
   size_t i;
 
   int* val_ptr;
   int arr[N];
 
   srand(time(NULL));
 
   for(i = 0; i < N; ++i)
   {      
      arr[i] = rand() % 100;
      printf("%d ", arr[i]);
   }
 
   printf("\nB: ");
   if(scanf("%d", &b) != 1) return 1;
 
   val_ptr = find(arr, arr + N, b);
   if(val_ptr != NULL)
      selection_sort(val_ptr + 1, arr + N);
 
   for(i = 0; i < N; ++i)
      printf("%d ", arr[i]);
   putchar('\n');
 
   return 0;
}
Спасибо огромное - выручили как никогда!
Fox01
3 / 3 / 0
Регистрация: 04.03.2012
Сообщений: 55
13.03.2012, 23:23  [ТС]     Как решается эта сложная задача #11
Цитата Сообщение от valeriikozlov Посмотреть сообщение
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>
 #include <iomanip>
 
 //прототип функции, выводящей массив на экран
 void print(int[], int);
 using namespace std;
 
 int main()
 {
 
 //определяем переменные
 const int size = 10;
 int array[size] = { 35, 12, 7, 8, 47, 98, 5, 56, 17, 83};
 int max, j, temp, B;
 
 //выводим исходный (неотсортированный) массив на экран
 cout << "Nosorted array: " << endl;
 print(array, size);
 
 cout<<"B = ";
 cin>>B;
 
 //начинаем сортировать
 //цикл проходов
 for (int i = 0; i < size -1; i++)
 {
 
     if(array[i]==B)
     {
         i++;        
         for(; i<size-1; i++)
         {
             max=i;
             for(j=i+1; j<size; j++)
                 if(array[max]>array[j])
                     max=j;
             temp=array[i]; array[i]=array[max]; array[max]=temp;
         }       
     }
 }
 
 
 //выводим отсортированный массив на экран
 cout << "Sorted array: " << endl;
 print(array, size);
 
 return 0;
 
 }
 
 //функция, печатающая массив
 void print (int a[], int sizeOfArray)
 {
 
 for (int i = 0; i < sizeOfArray; i++)
 
 cout << setw(4) << a[i];
 
 cout << endl << endl;
 
 }
не могли бы Вы помочь эту программу переделать - сделав сортировку ту же, но по убыванию?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.03.2012, 00:30     Как решается эта сложная задача #12
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>
 #include <iomanip>
 
 //прототип функции, выводящей массив на экран
 void print(int[], int);
 using namespace std;
 
 int main()
 {
 
 //определяем переменные
 const int size = 10;
 int array[size] = { 35, 12, 7, 8, 47, 98, 5, 56, 17, 83};
 int max, j, temp, B;
 
 //выводим исходный (неотсортированный) массив на экран
 cout << "Nosorted array: " << endl;
 print(array, size);
 
 cout<<"B = ";
 cin>>B;
 
 //начинаем сортировать
 //цикл проходов
 for (int i = 0; i < size -1; i++)
 {
 
         if(array[i]==B)
         {
                 i++;            
                 for(; i<size-1; i++)
                 {
                         max=i;
                         for(j=i+1; j<size; j++)
                                 if(array[max]<array[j])
                                         max=j;
                         temp=array[i]; array[i]=array[max]; array[max]=temp;
                 }               
         }
 }
 
 
 //выводим отсортированный массив на экран
 cout << "Sorted array: " << endl;
 print(array, size);
 
 return 0;
 
 }
 
 //функция, печатающая массив
 void print (int a[], int sizeOfArray)
 {
 
 for (int i = 0; i < sizeOfArray; i++)
 
 cout << setw(4) << a[i];
 
 cout << endl << endl;
 
 }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2012, 18:53     Как решается эта сложная задача
Еще ссылки по теме:

Задача о рюкзаке, решается ли она жадным алгоритмом? C++
Вроде простая задача и в то же время сложная C++
C++ очень сложная задача

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

Или воспользуйтесь поиском по форуму:
Fox01
3 / 3 / 0
Регистрация: 04.03.2012
Сообщений: 55
18.03.2012, 18:53  [ТС]     Как решается эта сложная задача #13
Спасибо огромное
Yandex
Объявления
18.03.2012, 18:53     Как решается эта сложная задача
Ответ Создать тему
Опции темы

Текущее время: 03:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru