百炼 特殊密码锁

  特殊密码锁:主要考虑两种情况,第一个按钮按下或者不按下。因为一旦第一个按钮的状态确定了,后面的按钮也确定了;
例:第一个按钮没按下,若第一个按钮对应终止状态不同,则第二个按钮需要按下,以此类推。对应代码如下:

// password.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)//取消scanf报错
int len = 0;
void change(char a[], int s)
{
	if (a[s] == '0')
		a[s] = '1';
	else
		a[s] = '0';
}
void setchange(char a[], int s)
{
	change(a, s);
	if (s == 0)//翻面的特殊情况
		change(a, s + 1);
	else
	{
		change(a, s - 1);
		change(a, s + 1);
	}
}
int min(int i, int j)
{
	if (i < j)
		return i;
	else
		return j;
}


bool cmp(char a[], char b[])
{
	for (int i = 0; i < len; i++)
	{
		if (a[i] != b[i])
			return false;
	}
	return true;
}


int main()
{
	char one[33], two[33];
	char c1[35];
	char c2[35];
	scanf("%s", one);
	scanf("%s", two);
	len = strlen(one);
	printf("%d\n", len);
	
	memcpy(c1, one, len);//拷贝字符串
	memcpy(c2, one, len);
	//len = strlen(c1);
	//printf("%d\n%s", len,c1);
	int x1 = 0;
	int x2 = 0;
	//第一种情况 第一个不按下
	for (int i = 0; i < len - 1; i++)
	{
		if (c1[i] != two[i])
		{
			setchange(c1, i + 1);
			x1++;
			if (cmp(c1, two))
				break;
		}
	}
	x2 = 1;//按下的情况
	setchange(c2, 0);
	if(cmp(c2,two))
	{ }
	else {
		for (int i = 0; i < len - 1; i++)
		{

			if (c2[i] != two[i])
			{
				setchange(c2, i + 1);//对应不同则反转下一位
				x2++;
				if (cmp(c2, two))
					break;
			}
		}

	}
	bool s1, s2;
	s1 = cmp(c1, two);//如果都行的话选择最小的
	s2 = cmp(c2, two);
	//printf("%s", c1);
	if(s1==false&&s2==false)
	{
		printf("\nimpossible\n");

	}
	else if (s1 == false && s2 != false)
	{
		printf("\n%d\n", x2);
	}
	else if (s1 != false && s2 == false)
	{
		printf("\n%d\n", x1);

	}
	else
	{
		printf("\n%d\n", min(x1, x2));
	}


    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN JavaScript 百炼成仙是一个指导JavaScript编程学习和进阶的专栏。JavaScript作为一门非常流行的脚本语言,在前端开发中担当着重要的角色。CSDN JavaScript 百炼成仙旨在通过教授JavaScript的各种技巧和知识,帮助学习者成为JavaScript高手,达到“仙”的境界。 在该专栏中,通过一系列的文章和教程,深入浅出地讲解了JavaScript的基础知识和重要概念,包括变量、数据类型、函数、对象等。此外,还介绍了JavaScript中的一些高级特性,如闭包、原型链、异步编程等。不仅如此,CSDN JavaScript 百炼成仙还探讨了JavaScript与其他前端技术的结合,如HTML和CSS,以及常见的JavaScript框架和库,如React和Vue等。 除了理论知识,该专栏还提供了大量的实际案例和代码示例,让学习者能够通过实践来巩固所学。通过这种实践和反复练习,学习者能够更好地理解与运用JavaScript编程。另外,该专栏还分享了一些实用的工具和资源,帮助学习者在实际项目中更高效地开发和调试JavaScript代码。 总的来说,CSDN JavaScript 百炼成仙是一个非常有价值的学习资源,它能够帮助想要掌握JavaScript编程的人,从初学者到进阶者,逐步提升自己的技能。通过学习这个专栏,人们能够更好地理解和利用JavaScript,解决实际问题,并为自己的职业发展打下扎实的基础。无论是前端开发工程师还是Web应用程序员,都可以从CSDN JavaScript 百炼成仙中受益匪浅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值