Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2015, 10:17   #1
cheburashkaRF
Пользователь
 
Регистрация: 09.11.2011
Сообщений: 22
По умолчанию найти количество повторяющихся элементов в массиве

//найти количество повторяющихся элементов в массиве
//вот наброски
PHP код:
$arr=[1,11,13,121,13,11,11,11,7,9,9];//ответ 8
         
$n=count($a);
         
$cnt=0;
         
        for(
$i=0;$i<$n-1;$i++){
             
$flag=true
        for(
$j=$i+1;$j<$n;$j++){
             if((
$a[$i]==a[$j])and($i==$j))
                 
flag=false;
        }
         if(
$flag){$cnt++};
         }   
          echo 
$cnt;//должно быть 8 
помогите поправить
cheburashkaRF вне форума Ответить с цитированием
Старый 28.08.2015, 10:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка:
Код:
$arr=[1,11,13,121,13,11,11,11,7,9,9];//ответ 8 
         $n=count($a); 
         $cnt=0;  
          
        for($i=0;$i<$n;$i++){ 
             $с=0;  
             for($j=0;$j<$n;$j++) $c+=($a[$i]==$a[$j])?1:0;
             $cnt+=($c==1)?1:0
         }    
          echo $n-$cnt;
Годится в качестве идеи?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2015, 10:37   #3
cheburashkaRF
Пользователь
 
Регистрация: 09.11.2011
Сообщений: 22
По умолчанию

не,т.к код не фурыжит,если можете помогите мои наброски поправить,пжта
cheburashkaRF вне форума Ответить с цитированием
Старый 28.08.2015, 10:39   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

а мож готовые функции юзать?
типа

Код:
 echo  count($arr)-count(array_count_values($arr));
ADSoft вне форума Ответить с цитированием
Старый 28.08.2015, 10:41   #5
cheburashkaRF
Пользователь
 
Регистрация: 09.11.2011
Сообщений: 22
По умолчанию

не,я хочу чист алгоритмически,саму логику понять и правильно написать,мануал юзать умею
cheburashkaRF вне форума Ответить с цитированием
Старый 28.08.2015, 11:04   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

как сделать красиво - не знаю (уверен, что можно!)

"в лоб" могу предложить такой вариант:
Код:
$arr=[1,11,13,121,13,11,11,11,7,9,9];
$cnt=0;
asort($arr);
$pred=false;
$flag=false;
foreach ($arr as $index => $value) {
	if(!$pred) {
		$pred=$value;
	}
	else {
		if($pred==$value) { 
			$cnt= $cnt+1 + ($flag?1:0); $flag=false; }
		else {
			$pred=$value;
			$flag=true;
		}
	}
}
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.08.2015, 11:06   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не,т.к код не фурыжит
А чего тогда:
Безымянный.jpg
совпадение?
Что я делаю не так?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2015, 11:10   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот! А вот и красивое решение на основе предложения ADSoft

Код:
$cnt=0;
foreach (array_count_values($arr) as $key => $value) {
	if($value>1) $cnt += $value;
}
echo "cnt = $cnt";
Stilet, в вашем коде из поста #2 минимум две "сурьёзные" синтаксические
ошибки:
Цитата:
Код:
 $с=0;
тут буква не в латинице

а тут:
Цитата:
Код:
$cnt+=($c==1)?1:0
точки с запятой в конце строки нет.

не знаю как у Вас, а у меня PHP такой код не выполняет!

после исправлений, да, выдает корректный ответ! ( 8 в данном случае!)

Последний раз редактировалось Serge_Bliznykov; 28.08.2015 в 13:21.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.08.2015, 11:38   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в вашем коде из поста #2 минимум две "сурьёзные" синтаксические
Синтаксические - да, но не алгоритмические же? Ну бывает, пишу спустя штаны (читать: Рукава), но это сезонное
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.08.2015, 11:43   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

алгоритмически Ваш код работает верно!
(в отличие от моего кривого кода из поста #6 )
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Количество повторяющихся элементов в массиве (Язык С) Ковях Н Н Помощь студентам 0 21.01.2013 20:26
Найти количество повторяющихся элементов массива в C maxwel6064 Помощь студентам 7 16.11.2012 19:33
Найти количество повторяющихся элементов. xEk Помощь студентам 3 14.05.2012 23:08
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов Strax Фриланс 11 12.06.2010 20:13
количество повторяющихся элементов в массиве Андрей.12 Помощь студентам 1 28.01.2010 23:57