nadamhu Creative Commons License 2006.04.27 0 0 194

Na, megoldottam, nem tul szep, de viszonylag gyors, es ugy tunik jo:

 

int isCool(unsigned int a) {

       unsigned int b = ~a;
       unsigned int c = b >> 1;
       return ((b ^c) - 1 == c)||(a == 0xFFFFFFFF);

}

 

A megoldast megsejtettem, majd szamitogep segitsegevel bizonyitottam:) :

 

int main(int argc, char *argv[])
{
    for(unsigned int a=0; a<0xFFFFFFFF; a++) {
       unsigned int b = ~a;
       unsigned int c = b >> 1;
       if(((b ^c) - 1 == c)||(a == 0xFFFFFFFF)) {
              printf("%u ", a);
              unsigned int m = 0x80000000;
              for(int i=0; i<32; i++) {
                      printf((m&a)?"1":"0");
                      m = m >> 1;
              }
              printf("n");
       }
    }
}

Kimenet:

 

0 00000000000000000000000000000000
2147483648 10000000000000000000000000000000
3221225472 11000000000000000000000000000000
3758096384 11100000000000000000000000000000
4026531840 11110000000000000000000000000000
4160749568 11111000000000000000000000000000
4227858432 11111100000000000000000000000000
4261412864 11111110000000000000000000000000
4278190080 11111111000000000000000000000000
4286578688 11111111100000000000000000000000
4290772992 11111111110000000000000000000000
4292870144 11111111111000000000000000000000
4293918720 11111111111100000000000000000000
4294443008 11111111111110000000000000000000
4294705152 11111111111111000000000000000000
4294836224 11111111111111100000000000000000
4294901760 11111111111111110000000000000000
4294934528 11111111111111111000000000000000
4294950912 11111111111111111100000000000000
4294959104 11111111111111111110000000000000
4294963200 11111111111111111111000000000000
4294965248 11111111111111111111100000000000
4294966272 11111111111111111111110000000000
4294966784 11111111111111111111111000000000
4294967040 11111111111111111111111100000000
4294967168 11111111111111111111111110000000
4294967232 11111111111111111111111111000000
4294967264 11111111111111111111111111100000
4294967280 11111111111111111111111111110000
4294967288 11111111111111111111111111111000
4294967292 11111111111111111111111111111100
4294967294 11111111111111111111111111111110

 

Biztos van szebb megoldas is, mert maskepp gligeti nem emlitett volna 5 perces gondolkodasi idot.:)

Előzmény: nadamhu (193)