华为机试HJ20-密码验证

1.长度超过8位

2.包含大小写字母,数字,其他符号,以上四种超三种

3.不能有长度超2的子串重复

#include<stdio.h>
#include<string.h>
int main()
{
	char str[100];
	while (scanf("%s", str) != EOF)
	{
		int len = strlen(str);
		int i, n1=0,n2=0,n3=0,n4=0,count=0;
		int flag = 1;
		if (len > 8)
		{
			for (i = 0; i < len; i++)
			{
				if (str[i] >= '0' && str[i] <= '9')
					n1 = 1;
				else if (str[i] >= 'A' && str[i] <= 'Z')
					n2 = 1;
				else if (str[i] >= 'a' && str[i] <= 'z')
					n3 = 1;
				else n4 = 1;
				count = n1 + n2 + n3 + n4;
				if (count >= 3)
					break;
					
			}
			if (count < 3)
			{
				flag = 0;
			}

			if (flag == 1)
			{
				for (int i = 0; i < len - 5; i++)
				{
					for (int j = i + 2; j < len - 2; j++)
					{
						if (str[i] == str[j] && str[i + 1] == str[j + 1] && str[i + 2] == str[j + 2])
						{
							flag = 0;
							break;
						}
					}
				}

			}
	
		}
		else
		{
			flag = 0;
		}

		if (flag == 0)
		{
			printf("NG\n");
		}
		else
		{
			printf("OK\n");
		}
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值