题解 | #安卓图案解锁#

安卓图案解锁

https://ac.nowcoder.com/acm/problem/13585

本题难点可能在于如何判断两点连接是否经过其他的点

1、我是利用的一个cFlag数组做标记,让需要经过其他点的两点数值相同如1、9连接需要经过其他的点,则cFlag[1] = cFlag[9];1、5连接不需要经过其他的点,则cFlag[1] != cFlag[5]
2、利用num数组来标记此点是否被占用,如:1被占用,则num[1] = 1;9没被占用,则num[9] = 0

#include <iostream>
using namespace std;
#include <stdlib.h>
#include <string.h>

int num[15]; //记录数字是否出现过
char str[35]; //记录输入的字符串

void isLegal(char* str, int nLen)
{
    if(nLen > 9)
    {
        printf("NO\n");
        return;
    }

    int i;
    int temp1; //用来存放str[i-1]存放的数字
    int temp2; //用来存放str[i]存放的数字
    char cFlag[10] = {5, 1, 3, 1, 2, 0, 2, 1, 3, 1}; //标记,如1、9连接需要经过其他的点,则cFlag[1] = cFlag[9];1、5连接不需要经过其他的点,则cFlag[1] != cFlag[5]
    for(i = 0; i < nLen; i++)
    {
        temp2 = str[i] - '0';
        if(0 == i)
        {
            num[temp2] = 1;
            continue;
        }

        //判断该点是否已经被占用,如果被占用直接退出
        if(1 == num[temp2])
        {
            printf("NO\n");
            return;
        }

        temp1 = str[i-1] - '0';

        //判断两点的连线是否经过其他点
        if(cFlag[temp1] == cFlag[temp2])//经过其他点 情况:一个数字在123,一个数字在789;两个数字在同一行且差为2
        {
            //判断经过的点是否已经被占用,即num[(temp1+temp2)/2]是否为1
            if(0 == num[(temp1+temp2)/2]) //经过的点没有被占用
            {
                printf("NO\n");
                return;
            }
            else
                num[temp2] = 1;
        }
        else //没有经过其他点
            num[temp2] = 1;
    }

    printf("YES\n");
}

int main(void)
{
    int nLen;
    while(~scanf("%s", str))
    {
       nLen = strlen(str);
        isLegal(str, nLen);
        memset(str, 0, sizeof(str));
        memset(num, 0, sizeof(num));
    }

}
全部评论

相关推荐

07-11 10:56
门头沟学院 Java
码客明:大胆的说自己能实习6个月就行
点赞 评论 收藏
分享
06-15 20:57
已编辑
门头沟学院 Java
CARLJOSEPH...:年轻人有傲气很正常,但是建议工作前洗净傲气。 说实在的,什么奖学金什么奖项的都很一般。尊重你的老师,在有时间的时候去上课,真遇到走不开的事,请态度端正地向你的老师说明情况,请求请假。我相信任何一个有师德的老师都会允许的(我的老师就是这样)。
点赞 评论 收藏
分享
06-18 08:36
湖南大学 Java
运营你豪哥:没啥拷打的 1.增加量化结果,现在有点缺效果数据 2.突出复杂性,现在的项目描述有点像功能清单,强调一下技术难点和解决方案。
不给转正的实习,你还去吗
点赞 评论 收藏
分享
牛客73617529...:无端端被你骂一句
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务