С++. Задачи с решениями. Одномерные массивы
к списку всех задач на массивы
1. Удалить в массиве все числа, которые повторяются более двух раз.
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 |
int main() { int a[100]; int n=10; int i, j, count=0; srand(time(NULL)); for (i = 0; i < n; i++) { a[i]=rand()%20; cout<<setw(4)<<a[i]; } cout<<endl; for (i = 0; i < n; i++) { count=1; for (j=i+1; j<n; j++) { if (a[j] == a[i]) count++; } if (count > 2) { int one=a[i]; for (j=i; j<n; j++) { if (a[j]==one) { // удаляем for (int k=j+1; k<n; k++) { a[k-1]=a[k]; } n--; j--; } } i--; } } // www.itmathrepetitor.ru if (n==0) cout<<"empty array"<<endl; else for (int p = 0; p < n; p++) { cout<<setw(4)<<a[p]; } cout<<endl; getch(); return 0; } |
2. Введите одномерный целочисленный массив. Найдите наибольший нечетный элемент. Далее трижды осуществите циклический сдвиг влево элементов, стоящих справа от найденного максимума, и один раз сдвиг элементов вправо, стоящих слева от найденного максимума.
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 |
int main() { int* a; int n; // ввод n с проверкой do { cout<<"input n: "; cin>>n; } while (n<1); // выделение памяти a=new int [n]; // ввод с консоли значений массива for (int i=0; i<n; i++) { cout<<"input a["<<i<<"]: "; cin>>a[i]; } //вывод исходного массива на экран cout<<"start: "<<endl; for (int i=0; i<n; i++) cout<<a[i]<<" "; cout<<endl; // поиск наибольшего нечетного int imax=-1; for (int i=0; i<n; i++) if (a[i]%2==1) { if (imax==-1) imax=i; else if (a[imax]<a[i]) imax=i; } if (imax==-1) // если нечетных нет вообще cout<<"no odd number"<<endl; else { // вывод на консоль наибольшего нечетного cout<<"max odd number: "<<a[imax]<<endl; cout<<"index : "<<imax<<endl; if (imax!=n-1) // если справа от него есть элементы for (int i=0; i<3; i++) // сдвиг три раза { int t=a[imax+1]; for (int j=imax+1; j<n-1; j++) // сдвиг a[j]=a[j+1]; a[n-1]=t; } if (imax!=0) // если слева от него есть элементы { int t=a[imax-1]; for (int j=imax-1; j>0; j--) // сдвиг a[j]=a[j-1]; a[0]=t; } // вывод на консоль результат cout<<"end: "<<endl; for (int i=0; i<n; i++) cout<<a[i]<<" "; cout<<endl; } // удаление памяти delete [] a; getch(); return 0; } |
3. Найдите сумму отрицательных элементов массива.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
int sum=0; for (int i=0; i<n; i++) { if (a[i]<0) { sum+=a[i]; } } if (!sum) { cout<<"no numbers < 0"; } else { cout<<"sum = "<<sum; } |
4. Найдите произведение элементов массива с нечетными номерами.
1 2 3 4 5 6 |
int p=1; for (int i=1; i<n; i+=2) { p*=a[i]; } cout<<"answer: "<<p<<endl; |
5. Найдите сумму элементов массива между двумя первыми нулями. Если двух нулей нет в массиве, то выведите ноль.
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 |
int i1=-1, i2=-1; for (int i=0; i<n; i++) { // www.itmathrepetitor.ru if (!a[i]) { if (i1==-1) i1=i; else if (i2==-1) i2=i; else break; } } if (i2==-1) { cout<<0; } else { if (i1==i2-1) cout<<"no numbers between zeros"; else { int s=0; for (int i=i1+1; i<i2; i++) s+=a[i]; cout<<"sum = "<<s; } } |
6. Найдите наибольший элемент массива.
1 2 3 4 5 |
int max=0; for (int i=1; i<n; i++) { if (a[i]>max) max=a[i]; } cout<<"max: "<<max<<endl; |
7. Найдите наименьший четный элемент массива. Если такого нет, то выведите первый элемент.
1 2 3 4 5 6 7 8 9 |
int imin=-1; for (int i=0; i<n; i++) { if ((!(a[i]%2) && (imin==-1 || a[imin]>a[i])) imin=i; } if (imin==-1) cout<<a[0]; else cout<<a[imin]<<endl; |
8. Преобразовать массив так, чтобы сначала шли нулевые элементы, а затем все остальные.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
int i1=0, i2=n-1; while (i1<i2) { // www.itmathrepetitor.ru while (i1 < i2 && !a[i1]) i1++; while (i2 > i1 && a[i2]) i2--; if (i1 < i2) { int tmp=a[i1]; a[i1]=a[i2]; a[i2]=tmp; } i1++; i2--; } |
9. Найдите сумму номеров минимального и максимального элементов.
1 2 3 4 5 6 7 8 |
int imax=0, imin=0; for (int i=1; i < n; i++) { if (a[i]>a[imax]) imax=i; if (a[i]<a[imin]) imin=i; } cout<<"answer: "<<imin+imax<<endl; |
10. Найдите минимальный по модулю элемент массива.
1 2 3 4 5 6 7 |
int min=abs(a[0]); for (int i = 1; i < n; i++) { if (min>abs(a[i])) min=a[i]; } // www.itmathrepetitor.ru cout<<"abs min: "<<min<<endl; |