Консультация № 144351
19.09.2008, 01:34
0.00 руб.
0 2 2
Здравствуйте господа экперты. Помогите решить такую задачу :
Среди N введенных чисел найти количество соседей разных знаков. Спасибо

Обсуждение

Неизвестный
19.09.2008, 03:15
общий
это ответ
Здравствуйте, Нюров Алесандр Сергеевич!

Код С++ программы с комментариями в приложении. Скомпилировано в MS Visual Studio 2005.

Суть решения (насколько правильно я понял условие задачи):

Если Вы ввели массив из N разных елементов, то количество соседей разных элементов, т.е. пар разных элементов будет N - 1, т.е. если Вы ввели в массив 17 разных элементов, то таких "соседей" будет 16.

Например вводим: 1 2 3 4 5 - здесь пар разных элементов будет 4 - 1 и 2, 2 и 3, 3 и 4, 4 и 5. А если ввести 1 2 3 3 5 - соответственно здесь будет три пары разных элементов.

В программе, с помощью цикла происходит сравнение двух соседних элементов. Т.е. если i - тый элемент не равный своему i + 1 - ому, значит они разные и следовательно инкрементируем переменную k_vo, в которой сохраняется значение количества и переходим к следуюющей итерации цикла.

for(int i = 0; i < size; i++)
{
if(mas[i] != mas[i + 1]) k_vo++; continue;
}

Будут какие-либо вопросы по коду - обращайтесь в мини-форум вопроса.



Приложение:
//Заголовок потокового ввода/вывода
#include <iostream>
//Заголовок манипуляторов ввода/вывода
#include <iomanip>

using namespace std;

int main()
{
//Объявляем массив целых чисел на 10 элементов;
int mas[100];
//Объявляем переменную размерности
int size = 0;

//Приглашение ввести значение размерности
cout << "Vvedyte razmernost' masyva: ";

do
{
//Ввод значения размерности
cin >> size;

if(size <= 1)
{
cout << endl << "Vvedyte razmernost' bol'she 1: ";
}
}
while(size <= 1);

cout << endl;

for(int i = 0; i < size; i++)
{
cout << " el.of mas[" << i << "]: ";

cin >> mas[i];
}

cout << endl << " Nachalnuy masyv: " << endl << endl;

//Вывод массива на экран
for(int i = 0; i < size; i++)
{
cout << " " << mas[i] << setw(3);
}

//Объявляем переменную количества
int k_vo = 0;

//Цикл, в котором происходит сравнение двух соседних элементов
for(int i = 0; i < size; i++)
{
if(mas[i] != mas[i + 1]) k_vo++; continue;
}

//Вывод значения количества на экран
cout << endl << endl << "Kolychestvo sosedov raznyh elementov massyva: " << (k_vo - 1) << endl << endl;

return 0;
}
Неизвестный
20.09.2008, 22:53
общий
это ответ
Здравствуйте, Нюров Алесандр Сергеевич!
В задаче используется операция "исключающее или", которая имеет следующую таблицу истинности:
0|0|0
1|0|1
0|1|1
1|1|0


Приложение:
/*Выводит на экран количество соседей разных знаков*/

//Содержит ввод-вывод
#include <iostream>
//Файлы необходимы для работы функции rand()-генератора случайных чисел
#include <time.h>
#include <stdlib.h>

using namespace std;
int main()
{
//Ввод размера массива
int n;
cout<<"BBeduTe PA3MEP MACCuBA: ";
cin>>n;
cout<<"\n";

//счетчик соседей с разными знаками
int count=0;
//логические переменные для запоминания знака элемента
bool a,b;
//создается новый массив из "кучи" размерностью n
int* mas=new int[n];

//Заполнение массива и его вывод
for(int i=0; i<n; i++) {
//rand() заполняет массив случайными числами
mas[i]=rand()%25-10;
cout<<mas[i]<<"\t";}
cout<<"\n\n";

for(int i=0;i<n-1;i++){
//Если i-й элемент >0,то а=1, если менише, то а=0
if(mas[i]>0) a=1;
else a=0;

//Если (i+1)-й элемент >0,то b=1, если менише, то b=0
if(mas[i+1]>0) b=1;
else b=0;

//С помощью операции "исключающее или" определяем количество соседей
//count увеличивается, если а=1,b=0 или а=0,b=1
if(a^b) count++;
}
cout<<"KOLu4ECTBO COCEDEY C PA3HbIMu 3HAKAMu COCTABLYAET: "<<count<<endl;

return 0;
}
Форма ответа