Помогите пожалуйста С++... массивы одномерные..

Аватара пользователя
kapitay
Сообщения: 5
Зарегистрирован: 25 фев 2008, 11:15
Откуда: Moscow
Контактная информация:

Здравствуйте я тут недавно нашел одну задачу на массивы и мне стало интересно её решить! Поначалу показалось не очень сложной, а теперь когда вник в суть дела оказалось что она мне не под силу.. Помогите мне её решить (просто оочень интересн о) ВОТ СУТЬ ЗАДАЧИ: Дана последовательность целых чисел. Опредилить количество различных чисел этой последовательности. :rolleyes: :confused:

Я решил что после того как вводим числа их нужно сначала отсортировать методом пузырьковой сортировки (чтобы вводимые числа выстроились в ряд по порядку) а потом сравнивать рядом стоящие числа....

P>S/ Задачка должна решаться с помощью массива

[HTML]Вот мой нелепый кодик))

#include <iostream>
using namespace std;

int main()
{
int nums[10];
int a,b,t,vv;
int size;
int co=0,so=0,sum=0,dum=07;
bool pll=false;

size=10;
cout<<"vvedite rad chisel dla analiza ";
for (t=0;t<size;t++) {

cin>>vv;
nums[t]=vv;
}

for (a=1;a<size;a++)
for(b=size-1;b>=a; b--)
{
if(nums[b-1]>nums) {
t=nums[b-1];
nums[b-1]=nums;
nums=t;
}
}
cout<<"teper chisla raspolojeni po poradku\n ";
for (t=0;t<size;t++) cout<<nums[t]<<" ";


for (t=0;t<size;t++)
{

if (nums=nums[b+1] && pll==0) {co++; pll=true;}
if (nums=nums[b+1] && pll==1) {sum=co; pll=true;}
if (nums!=nums[b+1] && pll==1) {so++; pll=false;}
if (nums!=nums[b+1] && pll==0) {dum=so; pll=false;}
}

sum+=dum;
cout<<sum<<" ";
return 0;
}[/HTML]
drummer
Сообщения: 61
Зарегистрирован: 13 янв 2008, 18:43

замени

Код: Выделить всё

for (t=0;t<size;t++)
	{

		if (nums[b]=nums[b+1] && pll==0) {co++; pll=true;} 
		if (nums[b]=nums[b+1] && pll==1) {sum=co; pll=true;}
	if (nums[b]!=nums[b+1] && pll==1) {so++; pll=false;}
	if (nums[b]!=nums[b+1] && pll==0) {dum=so; pll=false;} 
	}

	sum+=dum;
cout<<sum<<" ";
на

Код: Выделить всё

sum=0;
	for (t=0;t<size-1;t++)
	{
        if(nums[t]!=nums[t+1]) sum++;
		
	}

	sum++;
        cout<<sum<<" ";
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Можно создать массив булевских элементов, проинициализировать их нулями. Пройтись по исходному, для каждого элемента исходного соответствующий элемент булевского установить в 1. Потом подсчитать количество единиц в булевском.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
kapitay
Сообщения: 5
Зарегистрирован: 25 фев 2008, 11:15
Откуда: Moscow
Контактная информация:

drummy спасибо большое, мне реально даже в голову не пришло упростить код =) Уже второй раз меня выручаете ))
syrr
Сообщения: 4
Зарегистрирован: 19 май 2008, 18:26

Здравствуйте уважаемые программисты!
Я понимаю, как это выглядит, когда люди вроде меня просят Вас решить простенькие задачки.Но простенькие это они для Вас...
Есть пара заданий, которые горят...Не успеваю разобраться в теме и, соответственно, их сделать.Все они на массивы.В принципе-ничего сложного если быть в теме.
1. В массиве A из N элементов поменять местами первый элемент с последним, второй с предпоследним и т.д. Элементы массива A должны быть случайными числами в диапазоне от 0 до 100. N вводится.
2. Определить суммы положительных и отрицательных элементов в каждой строке матрицы A размерами N*M . Размеры матрицы и ее элементы задать при помощи ввода.
3. Составить программу, выясняющую, является ли данное слово перевертышем ( так называются слова, читающиеся одинаково слева направо и справа налево, например: ПОТОП, НАГАН ).

P/S:заранее очень вам благодарен.Буду очень рад если кто чем поможет! :)
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

1.

Код: Выделить всё

for(i=0; i<N/2; i++)
{a[i]+=a[N-i-1];
 a[N-i-1]=a[i]-a[N-i-1];
 a[i]-=a[N-i-1];
 }
3. Пройтись до середины строки: если хоть один i-й символ не совпадает с N-i-тым, то не перевертыш. Если все совпадают - перевертыш. Кстати, по науке это называется палиндром.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
syrr
Сообщения: 4
Зарегистрирован: 19 май 2008, 18:26

Хыиуду, спасибо :) .С этими все понятно более-менее
Может кто поможет со 2-й ? :D
syrr
Сообщения: 4
Зарегистрирован: 19 май 2008, 18:26

Ах, да, забыл еще кое-что...А как массив случайными числами заполнить?(применимо к первой задаче) :confused:
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

syrr писал(а):Ах, да, забыл еще кое-что...А как массив случайными числами заполнить?(применимо к первой задаче) :confused:

Код: Выделить всё

 
#include<iostream.h>
#include "time.h"
#include "stdlib.h"

void main(void)
{
	srand(time(0));
	const N(3);
	const M(3);
	int znak;
	int matrix[N][M];
	for(int i=0;i<N;i++)
		for(int j=0;j<M;j++)
		{
			znak=rand()%2;
			matrix[i][j]=rand()%100 * (znak==1?-1:1);
		}
	
	int sum;
	int negsum;
	for(i=0;i<N;i++)
	{
		sum=0;
		negsum=0;
		for(int j=0;j<M;j++)
		{
			cout<<matrix[i][j]<<'\t';
			if(matrix[i][j]<0) negsum+=matrix[i][j];
			else sum+=matrix[i][j];
		}
		cout<<"negsum="<<negsum<<'\t'<<"possum="<<sum<<endl;
	}
}
Примерно так. А применительно к первой задаче, переделай сам.
syrr
Сообщения: 4
Зарегистрирован: 19 май 2008, 18:26

Оке.Спасибо большое, Albor, .Попробую.
Ответить