程序设计实习MOOC / 程序设计与算法(二)第1周测验(2019夏季)

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-1 10:22   320   0

001:特殊密码锁

#define _CRT_SECURE_NO_WARNINGS
#include <iostream> 
#include <cstdio>
#include<memory>
#include<string>
#include<cstring>
using namespace std;
int GetBit(int n, int i) {
 return (n >> i) & 1;
}
void SetBit(int &n, int i,char c) {
 if (c=='1')
  n |= (1 << i);
 else
  n &= ~(1 << i);
}
void FlipBit(int& n, int i) {
 n ^= (1 << i);
}

int main() {
 int IniNum=0,AimNum=0,count=99;
 string ini, aim;
 getline(cin, ini);
 getline(cin, aim);
 int len = ini.size();


 for (int i = 0;i <len ;i++) {
  SetBit(IniNum, len-1-i, ini[i]);
  SetBit(AimNum, len-1-i, aim[i]);
 }

 for (int i = 0;i < 2;i++) {
  int num = IniNum;
  int switches=0;
  if (i) {
   FlipBit(num, 0);
   FlipBit(num, 1);
   switches++;
  }
  for (int j = 1;j < len;j++) {
   if(GetBit(num,j-1)!=GetBit(AimNum,j-1)){
    switches++;
    FlipBit(num, j);
    FlipBit(num, j - 1);
    if(j<len-1)
     FlipBit(num, j + 1);
   }
  }
  if (num == AimNum)
   count = count > switches ? switches : count;
 }

 if (count == 99)
  cout << "impossible";
 else
  cout << count;
 return 0;
 
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP