C/C++

Задание по программированию язык C/СИ

Требуется определить массив целых чисел a (например, размера 30),
заполнить его случайными числами (в диапазоне от A до B, где A и B
задаются в директивах #define) или ввести его элементы с клавиатуры.
Определить количество попарно различных элементов массива a,
обладающих свойством Q (рассмотреть три случая: произвольный массив,
упорядоченный массив, массив с достаточно узким диапазоном значений
элементов). Свойства Q задаются в вариантах.
Программа должна содержать следующие функции:
• инициализация элементов массива случайными числами или
вводимыми с клавиатуры;
• вывод массива на экран;
• количество попарно различных элементов со свойством Q для
произвольного массива;
• количество попарно различных элементов со свойством Q для
упорядоченного массива;
• количество попарно различных элементов со свойством Q для
массива с достаточно узким диапазоном значений элементов.
Моë Q, является неченым числом.
Язык C
(Не С++)

Ломаю голову, но по факту стою на месте, помогите пожалуйста
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define LENGTH 30
#define A 1
#define B 1000
void random_fill(int* box) {
int i;
for (i = 0; i < LENGTH; ++i) box[i] = A + rand() % (B - A);
}
void fill(int* box, int a, int b) {
int i;
for (i = 0; i < LENGTH; ++i) box[i] = a + rand() % (b - a);
}
void show(int* box) {
int i;
for (i = 0; i < LENGTH; ++i) printf("%5i", box[i]);
puts("");
}
size_t twosome(int* box) {
int i, j;
size_t n = 0U;
for (i = 0, j = 1; i < LENGTH; ++i, ++j) {
if ((box[i] & 1) != (box[j] & 1)) {
++n;
}
}
return n;
}
int compare(const void* a, const void* b) {
if (*((int*)a) < *((int*)b)) return -1;
if (*((int*)a) > *((int*)b)) return 1;
return 0;
}
int integer(const char* msg) {
int value;
printf(msg);
scanf_s("%u", &value);
return value;
}
int main() {
int box[LENGTH];
int a, b;
srand((unsigned)time(NULL));
random_fill(box);
show(box);
printf("First: %u\n", twosome(box));
qsort(box, LENGTH, sizeof(box[0]), compare);
show(box);
printf("Second: %u\n", twosome(box));
a = integer("A: ");
do b = integer("B: "); while (b <= a);
fill(box, a, b);
show(box);
printf("Third: %u\n", twosome(box));
system("pause > nul");
}
Алексей Широков
Алексей Широков
61 950
Лучший ответ
Сергей Мещеряков Спасибо, но слишком тяжелый код, половины еще не проходили, разобраться в нём не смогу. Спасибо за помощь
Ну так покажи свой код - чтобы мы могли указать на ошибку. Например, то, что каждое == добавляет ДВА попарно различных элемента. Или забыл проинициализировать счётчик нулём.
Сергей Мещеряков Мой код почти нулевый, я вывел на экран только сам массив, ну ещё функцию рандома приписал