作者:mobiledu2502872283 | 来源:互联网 | 2023-10-10 09:50
《2017年11月22日》【连续043天】
标题:特殊密码锁问题的思考;
内容:
这道题由于输入输出数据都是0和1&#xff0c;因此可以采用位运算&#xff0c;一个字节是八个bit&#xff0c;由于N<30,可以用一个char类型4个元素的数组来储存数组&#xff0c;
但我解决不了在不知道输入个数的情况下将数据输入到字符中&#xff1b;
因此我采如下方法&#xff1a;
char s1[31],s2[31],s3[31],s4[31];
int t1&#61;0,t2&#61;0,t;
cin.getline(s1,30);
const int N&#61;strlen(s1);
cin.getline(s2,30);
而我一开始思路是&#xff0c;用当前和目标的每个数进行对比&#xff0c;当不相同时&#xff0c;改变后两个数&#xff0c;并计数&#xff0c;直到比较最后一个数&#xff0c;如果相同&#xff0c;
输出所记的数&#xff0c;不同时&#xff0c;输出“impossible”;
但此时忽略了第一个数的影响&#xff0c;如果同时摁下第一个和第二个数&#xff0c;则s1只改变了第三个数&#xff0c;便可能改变结果&#xff0c;同时&#xff0c;第一个数不同时&#xff0c;
摁一还是摁二结果可能不同&#xff1b;因此要分类&#xff0c;
可直接分为两大类&#xff0c;摁一和不摁一&#xff1b;
将s1的数据进行复制&#xff1a;
void Copy(char*a,char*b,int i)
{
for(int j&#61;0;j<&#61;i;&#43;&#43;j)
a[j]&#61;b[j];
}
然后进行运算&#xff1b;
我提交了几次还是出错&#xff0c;可能是程序编写的问题&#xff0c;或者逻辑本身有问题&#xff0c;明天在想想&#xff1b;
明日计划&#xff1a;争取解决这题&#xff1b;