среда, 25 сентября 2013 г.

с++ / not(1) = 0, not (0) = 1

 Последовательность 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, …, состоящая из нулей и единиц строится так: первый ее элемент равен 1, а остальные получаются из предшествующих с помощью логической операции отрицания: not(1) = 0, not (0) = 1. Второй элемент равен отрицанию первого, третий и четвертый – отрицанию первого и второго соответственно и т.д. По заданному n вычислить n-ый член указанной последовательности.


#include <iostream>
using namespace std;
int step(int x) //Если  0 или 2^n, то --. результат не может быть 0, 1, 2, 4 и т.д.
{
    x--;
    while (!(x & (x - 1)))
        x--;
    return x;  
}

int main(void)
{
    int n;
cout<<"CHISLO : ";
    cin >> n;

    if (n == 1)
        cout << 1;
    else if (n == 2)
        cout << 0;
    else
    {
        int k = 0;
        while(n > 2)
        {
            n -= step(n);
            k++;
        }

        if (((n == 1) && (k % 2 != 0)) || ((n == 2) && (k % 2 == 0)))
            cout << 1;
        else
            cout << 0;
    }

    return 0;  
}

Комментариев нет:

Отправить комментарий