Здравствуйте! Не писал на С++ уже больше полутора лет, друг попросил помочь, сам никак не разберусь...
Есть 2 задачи:
- Дан одномерный массив чисел, среди элементов которого есть одинаковые. Создать новый массив из различных элементов исходного массива.
- Дана действительная матрица размером n ? m, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением.
Написал следующий код:
Задача №1
Предполагаемый алгоритм:
- Пусть дан массив a
- Сравниваем a[k] элемент со всеми остальными
- Если значения совпадают (но не совпадают индексы) элементов массива, то увеличиваем f,
если в результате работы цикла значение f равно 1, то число добавляем в другой массив.
#1:
#include <iostream.h>
#include <conio.h>
int main() {
clrscr();
int a[100], b[100], i, j, n;
cin >> n;
for (i=0; i < n; i++) {
cout << "element " << i << " :";
cin >> a[i];
}
for (i = 0; i < n; i++) {
cout << " " << a[i] << " ";
}
int d = 0;
for(i = 0; i < n; ++i) {
int exists = 0;
for(j = 0; j < d; ++j)
if(a[i] == b[j]) { exists = 1; break; }
if(!exists) b[d++] = a[i];
}
cout << endl;
for (i=0; i < d; i++) {
cout << b[i] << " ";
}
return 0;
}
Ну, и
#2:
#include <iostream.h>
#include <conio.h>
#include <values.h>
int main () {
int i, j, n, m, res_i, res_j;
clrscr();
cout << "Enter rows:";
cin >> n;
cout << "Enter cols:";
cin >> m;
int a[10][10];
for(i = 0; i < n; i++) {
for(j = 0; j < m; j++) {
cout << "Enter a[" << i+1 << "," << j+1 << "]";
cin >> a[i][j];
}
}
int maximal = -MAXINT;
for(i = 0; i < n; ++i) {
int ix_min = 0;
for(j = 1; j < m; ++j)
if(a[i][j] < a[i][ix_min]) ix_min = j;
if(a[i][ix_min] > maximal) {
maximal = a[i][ix_min];
res_i = i; res_j = ix_min;
}
}
cout << "max of mins = " << a[res_i][res_j]
<< ": " << res_i << ", " << res_j << endl;
return 0;
}
Большое спасибо за помощь!