Есть ответ 👍

Найти все симметричные натуральные числа (палиндромы) из промежутка от а до в (а и в вводятся с клавиатуры) решать через массив.

166
232
Посмотреть ответы 2

Ответы на вопрос:


// #includes {{{ #include < stdio.h> #include < iostream> #include < cmath> #include < algorithm> #include < fstream> #include < vector> #include < complex> #include < queue> #include < set> #include < map> #include < cstdlib> #include < cstdio> #include < cstring> #include < cassert> #include < ctime> #include < cmath> #include < string> #include < deque> #include < list> #include < math.h> #include < fstream> #include < stack> #include < iomanip> #include < bitset> #include < memory.h> #include < bitset> #include < functional> #include < numeric> #include < utility> #include < sstream> #include < ctime> #include < assert.h> #include < stdarg.h> #include < time.h> #include < limits.h> #include < ctype.h> #include < complex> #include < bits/stdc++.h> // }}}  // #defines {{{#define exp 1e-10#define sc scanf#define pr printf#define mk make_pair#define pb push_back#define pf push_front#define ll long long#define fi first#define se second#define eps 0.000000001#define inf 1000000007#define file "management"#define eps 0.000000001#define cmd 1000000009#define pi 3.14159265#define mod 1000000007#define sz(x) ((int)(x).#define in(s) freopen(s, "r", stdin); #define pi 3.1415926535897#define rep(i, n) (n) i = 0; i < (n); i++)#define out(s) freopen(s, "w", stdout); #define sync ios_base: : sync_with_stdio( 0 )// }}}  using  namespace  std;   typedef  long  long  lglg; const  int  inf  =  1< < 30, maxn  =  1000; int  ax[]  =  {0,  1,  -1,  0,  0}; int  ay[]  =  {0,  0,  0,  -1,  1};   int  main(){     string a;       int  n, dp[102][102], i, j, px[102][102], py[102][102];       cin  > >   a;       memset(dp,  0,  sizeof(dp));       memset(px,  -1,  sizeof(px));     a  =  "."  +  a;     n  =  a.size()  -  1;       for  (i  =  1;   i  < =  n;   i++)         dp[i][i]  =  1;       for  (i  =  n;   i  > =  1;             for  (j  =  i  +  1;   j  < =  n;   j++)           {               if  (a[i]  ==  a[j]  & &   dp[i][j]  <   2  +  dp[i  +  1][j  -  1])               {                 dp[i][j]  =  2  +  dp[i  +  1][j  -  1];                 px[i][j]  =  i  +  1;                 py[i][j]  =  j  -  1;               }               if  (dp[i][j]  <   dp[i  +  1][j])               {                 dp[i][j]  =  dp[i  +  1][j];                 px[i][j]  =  i  +  1;                 py[i][j]  =  j;               }               if  (dp[i][j]  <   dp[i][j  -  1])               {                 dp[i][j]  =  dp[i][j  -  1];                 px[i][j]  =  i;                 py[i][j]  =  j  -  1;               }            }       cout  < <   dp[1][n]  < < '\n';       int  x  =  1, y  =  n, q, w;     vector< char>   ans;       char  z  =  0;       while  (px[x][y]  ! =  -1)       {           if  (px[x][y]  ==  x  +  1  & &   py[x][y]  ==  y  -  1)             ans.push_back(a[x]);         q  =  px[x][y];         w  =  py[x][y];         x  =  q;         y  =  w;       }       if  (x  ==  y)         z  =  a[x];       for  (i  =  0;   i<   ans.size();   i++)           cout  < <   ans[i];       if  (z  ! =  0)           cout< <   z;       for  (i  =  ans.size()  -  1;   i  > =  0;             cout< <   ans[i];       return  0;   }     

нумерация битов, чтоб было понятнее, 7654 3210

68 в двоичной это 0100 0100

36 в двоичной это 0010 0100

теперь порассуждаем.

x& 68 не будет равно нулю только при условии, что либо бит 2 равен одному, либо бит 6.

x& 36 = 0 если бит 5 и бит 2 тоже равны нулю.

получается. что чтобы выражение было истинным (x& 68 ! = 0) -> (x& 36 = 0), необходимо чтобы в числе бит 6 был равен единице, а биты 5 и 2 - нулям, то есть число x имеет вид ? 10? ? 0? ?

в этом случае, чтобы было истинным выражение x& a = 0, в a бит 6 должен быть нулем, биты 5 и 2 могут быть и нулем, и единицами, а все остальные должны быть нулями. поэтому подходящие под а числа:

0000 0000 - 0

0000 0100 - 4

0010 0000 - 32

0010 0100 - 36

ну а дальше зависит от того, считать ли 0 натуральным. если не считать - то ответ а = 4

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

    otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.

Подпишись на наш телеграмм канал

GTP TOP NEWS