|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.09.2008, 02:27 | #1 |
Пользователь
Регистрация: 07.05.2008
Сообщений: 11
|
Задачка про массив - Из массива удалить четные элементы, стоящие после максимального
Помогите пожалуйста решить задачу:
Из массива удалить четные элементы, стоящие после максимального: Например: 1 2 2 5 4 4 3 3 Должно получится: 1 2 2 5 3 3 Как найти максимальный и четный элементы я разобрался, а как это все соединить вместе и удалить нужное, чтото не пойму.. |
22.09.2008, 12:01 | #2 |
Пользователь
Регистрация: 21.09.2008
Сообщений: 10
|
алгоритм будет примерно таким:
начиная с н-ого максимального элемента и до конца массива проверяем, если 4етное, то сохраняем в переменной кол-во 4етных(это понадобитса позже) и делаем цикл типа S[i]=S[i+1] до конца массива(т.е. массив будет двигаться влево или к на4алу) и проверяем текущий элемент опять, если 4ет, то повторяется предыдущий цикл, если нет, тогда увеличиваем номер элемента. в конце при выводе надо будет задать цикл толко до ("коли4ество элементов в массиве" - "кол-во 4етных") 1 2 2 5 4 4 3 3 1 2 2 5 4 3 3 3 <----здесь показаны шаги после каждой итерации 1 2 2 5 3 3 3 3 <----здесь показаны шаги после каждой итерации 1 2 2 5 3 3 <----вывод на печать Последний раз редактировалось Gaspar312; 22.09.2008 в 12:05. |
22.09.2008, 19:05 | #3 |
Пользователь
Регистрация: 22.09.2008
Сообщений: 59
|
Crookers попробуи так
Код:
|
23.09.2008, 03:00 | #4 |
Пользователь
Регистрация: 07.05.2008
Сообщений: 11
|
Большое спасибо!! но хотелось бы еще попросить чтобы оформить в виде функций, а то чтото не получается.. Вот в таком виде должно быть, я пытался делать, но чтото не пойму..
Код:
|
23.09.2008, 19:35 | #5 |
Пользователь
Регистрация: 22.09.2008
Сообщений: 59
|
что смог
#include <iostream> #include <ctime> using namespace std; int a[20]; int n; int b[30]; char mainmenu(){ char sel; while (1){ cout<<"Vibirite variant:\n1. Generatia\n2. Vvod s klavi\n3. Zagruzka iz failaa\n\n0. Vixod\n"; cin>>sel; if ((sel=='1')||(sel=='2')||(sel=='3') ||(sel=='0')) return sel; else cout<<"Neverniy nomer!\n"; } } void generateA() { srand(time(NULL)); n=5+rand()%10; for (int i=0;i<n;i++) a[i]=1+rand()%10; } void readA() { int i; cout<<"Vvedite n:"; cin>>n; for (i=0;i<n;i++) cin>>a[i]; } void loadA(int * a, int * n) { char str[1000]; int i; FILE *f=fopen(str,"r"); while (f==NULL) { cout<<"Aaaaeoa ioou ai oaea:\n"; scanf ("%s",&str); f=fopen(str,"r"); } fscanf(f,"%d",&n); for (i=0;i<*n;i++) fscanf(f,"%d",&a[i]); fclose(f); } int findmax(int * a, int n) { int i; int k; int max = a[0]; for (i =0; i < n; i++) if (a[i] > max) { k=i; max=a[i]; } return k; } void delet() { int i; int k; int t=0; int m; k=findmax(a, n); for (i = 0; i < k; i++) b[i] = a[i]; m=k; for (i = k; i < n; i++) if (a[i]%2 != 0) { b[m] = a[i]; m++; } else t++; n = n - t; } void printA(int c[], int n) { int i; for (i=0;i<n;i++) cout<<c[i]; cout<<"\n"; } int fff(int * a, int n) { // findmax(a, n); delet(); return 1; } int main() { char k=mainmenu(); switch(k) { case '1': generateA(); break; case '2': readA(); break; case '3': loadA(a,&n); break; default: exit(0); } fff(a,n); cout<<"Massiv posle zapolnenia\n"; printA(a,n); cout<<"Massiv posle udalenia\n"; printA(b,n); return 0; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Повторяющиеся элементы массива | Stanislav | Общие вопросы Delphi | 10 | 23.05.2008 12:31 |
Если все элементы матрицы четные, вычислить их произведение. | Misho0k | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 20.05.2008 22:51 |
Элементы массива и старшие цифры | logistics | Помощь студентам | 4 | 22.04.2008 00:12 |
переписать из массива в линейный двунаправленный список чётные элементы массива | Black_Ak24 | Помощь студентам | 12 | 08.01.2008 00:44 |
Как удалять элементы массива в Паскале? | Антонова Анна | Помощь студентам | 2 | 08.12.2007 17:01 |