Форум программистов, компьютерный форум CyberForum.ru

Задача на сообразительность - C++

Восстановить пароль Регистрация
 
Marina_P
8 / 8 / 0
Регистрация: 11.02.2013
Сообщений: 67
14.07.2013, 13:17     Задача на сообразительность #1
На собеседовании был задан следующий вопрос.
Дан псевдокод бесконечного цикла.
int x;
x=....
while(true)
{
x=....
printf("%d,"x);
}
какое значение или выражение нужно присвоить х, чтобы цикл все время выдавал 6,7,6,7....?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.07.2013, 13:23     Задача на сообразительность #2
C++
1
2
3
4
5
6
int x;
x=7;
while(true){
  x^=1;
  printf("%d,", x);//запятой не было!
}
не рано ли по собеседованиям ходить?

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от Marina_P Посмотреть сообщение
Задача на сообразительность
по-моему, это задачка на знание циклов

Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
14.07.2013, 13:27     Задача на сообразительность #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <cstdio>
 
int main()
{
    int x;
    x=7;
    while(true)
    {
     x= 6 + !(x%2);
     printf("%d,",x);
    }
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.07.2013, 13:29     Задача на сообразительность #4
Kuzia domovenok, добавлен один оператор
Dani, добавлено три оператора
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
14.07.2013, 13:31     Задача на сообразительность #5
Kuzia domovenok, 1) это первое, что пришло мне в голову. 2) проблему ТС решает. 3) я вижу у кого сколько операторов добавлено.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.07.2013, 13:50     Задача на сообразительность #6
Цитата Сообщение от Dani Посмотреть сообщение
Kuzia domovenok, 1) это первое, что пришло мне в голову. 2) проблему ТС решает. 3) я вижу у кого сколько операторов добавлено.
Да претензий то собственно нет. Просто я считаю, на собеседовании ожидали увидеть некое изящное и оптимизированное решение. Иначе можно было бы выдать что-нибудь через if(x==6)...
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 981
Регистрация: 02.05.2013
Сообщений: 10,297
Завершенные тесты: 1
14.07.2013, 13:58     Задача на сообразительность #7
В теле цикла:
C++
1
x = (x == 6 ? 7 : 6);
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.07.2013, 14:01     Задача на сообразительность #8
Цитата Сообщение от Убежденный Посмотреть сообщение
x = (x == 6 ? 7 : 6);
тоже 3 оператора, а x^=1; один оператор. Оптимизация!
Croessmah
14.07.2013, 14:02
  #9

Не по теме:

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
тоже 3 оператора, а x^=1; один оператор. Оптимизация!
Да никто с Вами не спорит. Люди просто выкладывают другие решения. Творческий поиск!

Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.07.2013, 14:09     Задача на сообразительность #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
C++
1
  x^=1;

Не по теме:

тоже люблю такие компактные штучки

soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
14.07.2013, 20:47     Задача на сообразительность #11
x^=1 а что происходит? ^ - Побитовое исключающее ИЛИ (XOR). и что оно делает?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
14.07.2013, 20:53     Задача на сообразительность #12
Цитата Сообщение от soican Посмотреть сообщение
а что происходит?
0110::6^
0001::1=
0111::7
и наоборот
0111::7^
0001::1=
0110::6
Т.е. Эта операция инвертирует младший бит, превращая 6 в 7, а 7 в 6

number=number^mask
Оператор Ксор Инвертирует в числе все биты числа, которым соответствуют единичные биты маски
и оставляет неизменными те биты, которым соответствуют нулевые биты маски
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
14.07.2013, 21:11     Задача на сообразительность #13
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Эта операция инвертирует младший бит
насколько я понял из Викепедий, эта операция меняёт всё что движется в случае 1 и 1 = 0 , 1 и 0 =1; 0 и 0 = 0;
C++
1
2
3
4
5
6
7
8
 
       0101 (decimal 5)
   XOR 0011 (decimal 3)
     = 0110 (decimal 6)
 
       0010 (decimal 2)
   XOR 1010 (decimal 10)
     = 1000 (decimal 8)
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
14.07.2013, 21:32     Задача на сообразительность #14

Не по теме:

Цитата Сообщение от Убежденный Посмотреть сообщение
x = (x == 6 ? 7 : 6);
Гениально Самое примитивное решение "в лоб", но надо еще уметь его увидеть, потому что мозг сразу начинает выдавать такое, что без поллитры не осилишь



вот мой вариант
C++
1
2
3
4
5
6
7
 int x;
 x = 7;
 while(true)
 {
     x = 13 - x;
     printf("%d,", x);
 }
Yandex
Объявления
14.07.2013, 21:32     Задача на сообразительность
Ответ Создать тему
Опции темы

Текущее время: 20:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru