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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2015, 13:23   #1
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию все четные четырехзначные числа, цифры которых следуют в порядке возрастания или убывания. PHP

почему не работает? что не так... алгоритм, кажется, правильный
Код:
<?	//Найти все четные четырехзначные числа, цифры которых следуют в порядке возрастания или убывания.
	$flag = 0;
	for($i=1000; $i<10000; $i+=2){ // чётные четырёхзначные
		while($i != 0){              // пока наше чётное четырёхзн не превратится в ноль будем делать следующее
			$n = $i%10; 			// берём последнюю цифру
			$i = intval($i/10);      // откидываем её
			$k = $i%10;              // берём последнюю от оставшегося
			
		}
		
		if($k > $n or $k < n) {				//если первая больше последней
				$flag = 1;			// присваиваем флагу 1
			}
	}
		if($flag == 1)				//если флаг 1
			echo $i;				// то наше число подходит под задачу и выводим его
	
	
	
?>
Anya She вне форума Ответить с цитированием
Старый 10.02.2015, 14:34   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
<?	//Найти все четные четырехзначные числа, цифры которых следуют в порядке возрастания или убывания.
	for($i=1000; $i<10000; $i+=2){ // чётные четырёхзначные
         if(($i/1000)>($i/100%10) && ($i/100%10)>($i%100/10) && ($i%100/10)>($i%10) ){
			echo $i;				// то наше число подходит под задачу и выводим его
	}}
	
	
?>
Не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.02.2015, 14:54   #3
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

нет, во-первых, он выводит числа начиная с 2210. во-вторых, с цифрами по убыванию. И это всё не универсально. Если бы нам, например, нужно было вывести все пятизначные, нам бы пришлось весь код полностью менять.
Anya She вне форума Ответить с цитированием
Старый 10.02.2015, 15:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Если бы нам, например, нужно было вывести все пятизначные,
Верно подмечено.
Ты if($k > $n or $k < n) { внеси внутрь while. Похоже проблема именно в ней.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.02.2015, 15:14   #5
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

неа, проблема не в этом( я пробовала.
Anya She вне форума Ответить с цитированием
Старый 10.02.2015, 15:35   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Жаль PHP нет под рукой... Проверить не на чем.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.02.2015, 16:17   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
if($k > $n or $k < n) { //если первая больше последней
$flag = 1; // присваиваем флагу 1
Не знаю, как PHP относится к записи логический операций словами (OR, AND, NOT, XOR), но советую заменить or на конструкцию || (логическое или), а также записать операнды этого логического выражения в скобках. Таким образом, ваше условие было бы записано так:

Код:
if ( ($k > $n) || ($k < $n) )
А ещё вы забыли перед n написать знак доллара (выделил красным)
Вадим Мошев вне форума Ответить с цитированием
Старый 10.02.2015, 16:26   #8
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

Код:
function isNumberUpDown($n){
		$flag = 1;
		while(n >=10){
			$mod = $n%10;
			$n = intval($n/10);
			$mod2 = $n%10;
		
			if($mod < $mod2){
				$flag = 0;
				break;
			}
		}
		if($flag == 0)
			return 1;
		else 
			return 0;
	}
	print(isNumberUpDown(1389));
даже без или не выводит.я написала функцию проверки на возрастание.
Anya She вне форума Ответить с цитированием
Старый 10.02.2015, 17:18   #9
Anya She
Пользователь
 
Аватар для Anya She
 
Регистрация: 06.11.2012
Сообщений: 40
По умолчанию

короче, я разобралась)
Код:
function isNumberUp($n){
		$flag = true;
		while($n >=10){
			$mod = $n%10;
			$n = intval($n/10);
			$mod2 = $n%10;
		
			if($mod <= $mod2){
				$flag = false;
				break;
			}

		}
		return $flag;
	}
	function isNumberDown($n){
		$flag = true;
		while($n >=10){
			$mod = $n%10;
			$n = intval($n/10);
			$mod2 = $n%10;
		
			if($mod >= $mod2){
				$flag = false;
				break;
			}

		}
	return $flag;
	}
	
	
	for($i=1000; $i<10000; $i+=2){
		if(isNumberUp($i)==1 || isNumberDown($i)==1)
			echo $i."<br>";
		
	}
Anya She вне форума Ответить с цитированием
Старый 10.02.2015, 17:51   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Молодца.
Кстати вместо $flag = false; break; можно сразу return false
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив. Вывести вначале все четные числа в порядке возрастания их индексов, затем - все нечетные в порядке убывания.( Delphi ) simonte Помощь студентам 9 07.12.2013 06:54
Упорядочить массив так, чтобы вначале размещались четные цифры в порядке возрастания, а затем нечетные - в порядке убывания Маруся171996 Паскаль, Turbo Pascal, PascalABC.NET 1 22.11.2013 17:42
С++ Получить все четырехзначные числа, в записи которых встречаются только цифры 0,2,3,7. Anya She Помощь студентам 1 18.12.2012 21:14
С++ Найти все четные четырехзначные числа, цифры которых следуют в порядке возрастания или убывания. Anya She Помощь студентам 14 14.12.2012 16:12
найти все четырехзначные числа, в которых ровно две одинаковые цифры (турбо паскаль) SkuLLL Помощь студентам 5 23.01.2012 19:23