Напечатать в обратном порядке наибольший элемент последовательности и его номер в массиве - C (СИ) (74896)
Формулировка задачи:
Всем добра) Ребята как выполнить эти задания? Дан массив из N целых чисел, где N<=16, каждое число в диапазоне от –32000 до 32000.
Массив для каждой задачи должен задаваться в секции объявлений глобальных переменных, например:
Примечание:
· Массив перед обработкой и после обработки распечатать в виде строки чисел.
· Массив должен задаваться в секции объявлений.
· В программе необходимо использовать функции с передаваемыми параметрами.
· Рекомендуется использовать операции целочисленной арифметики. Если в массиве отсутствует искомый элемент, то об этом следует вывести сообщение.
Задание. Определение характеристик массива.Две задачи решаются в рамках одной программы.
int A[16] = {85,-3,13,94,72,169,-21,43,57,46,9,12,83,101,49,28};
int B[16] = {18,21,563,-412,84,-17,520,321,121,954,7,19,883,10,17,1};Напечатать в обратном порядке наибольший элемент последовательности и его номер в массиве. Пример: 1 5 16 234 587 14; результат: R=785, i=5.
Найти сумму всех элементов, состоящих только из разных цифр. Пример: 32 122 343 166 -2 521; результат: 32+521+(-2)=551.
Решение задачи: «Напечатать в обратном порядке наибольший элемент последовательности и его номер в массиве»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//-----------------------------------------------------------------------------
void Print(const int array[], unsigned size) {
unsigned i;
for (i = 0; i < size; ++i) {
printf("%d ", array[i]);
}
printf("\n");
}
//-----------------------------------------------------------------------------
unsigned GetMax(const int array[], unsigned size) {
unsigned i;
unsigned max = 0;
for (i = 1; i < size; ++i) {
if (array[max] < array[i]) {
max = i;
}
}
return max;
}
//-----------------------------------------------------------------------------
unsigned NumberToDigits(unsigned number, unsigned digit[]) {
if (number == 0) {
return 0;
}
*digit = number % 10;
return 1 + NumberToDigits(number / 10, digit + 1);
}
//-----------------------------------------------------------------------------
bool IsUnique(int number) {
unsigned digits[10];
unsigned len = NumberToDigits(abs(number), digits);
bool isUnique = true;
unsigned i, j;
for (i = 0; (i < len - 1) && isUnique; ++i) {
for (j = i + 1; (j < len) && isUnique; ++j) {
isUnique = (digits[i] != digits[j]);
}
}
return isUnique;
}
//-----------------------------------------------------------------------------
int Sum(const int array[], unsigned size, bool (*Func)(int)) {
unsigned i;
int sum = 0;
for (i = 0; i < size; ++i) {
if (Func(array[i])) {
sum += array[i];
}
}
return sum;
}
//-----------------------------------------------------------------------------
int main() {
int A[] = {32, 122, 343, 166, -2, 521};
unsigned size = sizeof(A) / sizeof(*A);
unsigned max = GetMax(A, size);
Print(A, size);
printf("max[%u] = %d\n", max + 1, A[max]);
printf("sum = %d\n", Sum(A, size, IsUnique));
return 0;
}