Cod sursa(job #1483090)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 8 septembrie 2015 18:02:12
Problema Submultimi Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
#include <fstream>
#include <iostream>

using namespace std;

/*
10  2

5+1=6
101
  1
110

Aplicatii ale operatiilor pe biti


x << y muta biiti lui x cu y pozitii la stanga

x >> y muta bitii lui x cu y pozitii la dreapta

unsigned char 0, 255
255 - 0 + 1 = 256 = 2 ^ 8

1 << x = 2 ^ x

1 << 38

1LL << 38;

(long long) 1 << 38;

Ce bit este pe pozitia j a numarului x
     9876543210
     1010101010 &
     0010000000
     0010000000 = 2^6

     Cum testam daca un numar este sau nu putere a lui 2

    00010000000 = N
    00001111111 = N + 1
                    And
    00000000000 = 0

    10001000000 = N
    10000111111 = N - 1
                    AND
    10000000000 !=0


     if(x & (1 << j))
        return 1
        else
        return 0;


unsigned int [0, 2^32 - 1]
unsinged long long [0, 2^64 - 1]

int = 32 biti
long long 64 biti


SI(AND &)
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
SAU(or |)
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
XOR
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

5&1 = 1
101 &
001
001

____3210
0   0000 => {}
1   0001 => {1}
2   0010 => {2}
3   0011 => {1, 2}
4   0100 => {3}
5   0101 => {3, 1}
6   0110 => {3, 2};
7   0111
8   1000
9   1001
10  1010
11  1011
12  1100
13  1101
14  1110
15  1111
16 10000

[1, 2^N - 1]
*/

int main()
{
    ifstream fin("submultimi.in");
    ofstream fout("submultimi.out");
    int n;
    fin >> n;
    for(int i = 1 ; i < (1 << n) ; ++ i) {
        for(int j = 0 ; j < n ; ++ j)
            if(i & (1 << j))
                fout << j + 1 << ' ';
        fout << '\n';
    }
    return 0;
}