Консультация № 189358
13.05.2016, 18:46
0.00 руб.
0 1 1
Здравствуйте! Прошу помощи в следующем вопросе:

Дано натуральные числа N и B. Используя функцию rand(),
произвести последовательность N целых чисел, принадлежащих диапазону [-B, B].
Напечатать количество элементов, содержащихся между первым и последним максимальными.
Если в последовательности один максимальный элемент, то вывести 0.

Заранее большое спасибо!

Приложение:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

/** 2. Дано натуральные числа N и B. Используя функцию rand(),
произвести последовательность N целых чисел, принадлежащих диапазону [-B, B].
Напечатать количество элементов, содержащихся между первым и последним максимальными.
Если в последовательности один максимальный элемент, то вывести 0. */

int main()
{
srand(time(NULL));

SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int B, N;
printf("Введите число B:");
scanf("%d", &B);
printf("Введите кол-во элементов в последовательности N=");
scanf("%d", &N);

int i, a;
int max1, max2, b, c;

for(i=0; i<N; i++)
{
a=rand()%(2*B+1)-B;
printf("%d ", a);

if(i==1)
{
max1=a;
max2=a;
b=i;
c=i;
}
if (a>max1)
{
max1=a;
b=i;
}
if (a>=max2)
{
max2=a;
c=i;
}
}
int k=c-b;

printf("\n\n max1 = %d, max2 = %d, k = %d", b, c, k);


return 0;
}

Обсуждение

давно
Посетитель
7438
7205
14.05.2016, 11:23
общий
это ответ
Здравствуйте, Usagisan!
Исправленная программа:
[code h=200]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

/** 2. Дано натуральные числа N и B. Используя функцию rand(),
произвести последовательность N целых чисел, принадлежащих диапазону [-B, B].
Напечатать количество элементов, содержащихся между первым и последним максимальными.
Если в последовательности один максимальный элемент, то вывести 0. */

int main()
{
srand(time(NULL));

SetConsoleCP(1251);
SetConsoleOutputCP(1251);

int B, N;
printf("Введите число B: ");
scanf("%d", &B);
printf("Введите кол-во элементов в последовательности N: ");
scanf("%d", &N);

int i, a;
int max, b, c;

for(i=0; i<N; i++)
{
a=rand()%(2*B+1)-B;
printf("%d ", a);

if(i==0) //0-й элемент, а не 1-й
{
max=a; //максимальное значение у нас только одно
b=c=i; //индексы первого и последнего
}
else //все остальные
{
if (a>max)
{
max=a; //новый максимальный
b=c=i; //индексы равны индексу нового максимального
}
else if (a==max)//если максимальные равны
c=i; //то сохраняем индекс последнего!
}
}

//количество элементов между последним и первым максимальным равно
//разности между индексами минус 1, ну или 0, если максимальный один
printf("\n\nmax = %d, k = %d\n", max, (c==b)?0:c-b-1);


return 0;
}[/code]
5
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа