目录
一、题目描述
二、课后习题
1.题目
方法:
力扣截图
2.题目
方法:
力扣截图
3.题目
方法
力扣截图
循环输入。每次输入一个长度不超过 20 的密码字符串,判断这个串是否是一个安全密码串,是则输出 YES,否则输出 NO,没有任何输入的时候,程序结束。
安全密码串的条件如下:
1)长度在 8 到 16 之间;
2)至少有小写字母、大写字母、数字、特殊字符 中的任意三种;
3)特殊字符为~!@#$%^
的其中之一;
方法:
(1)先自定义一个字符串放置特殊字符,用于后面判断是否为特殊字符
(2)自建一个函数,用于判断是否为特殊字符
(3)定义一个标志字符串flag[4]
(4)用while循环开始判断字符串
(5)首先利用strlen函数,判断长度是否为8-16之间,若否则直接打印NO,且用continue跳出本次循环
(6)对小写字母、大写字母、数字、特殊字符进行判断,若是则令对应的flag[i]=1
(7)注意每次循环都要将flag还原成0,否则就会继承上次循环的1
代码如下:
#include "stdio.h"
#include "string.h"
char teshu[]="~!@#$%^";
int isTeshu(char ch) //判断是否为特殊字符
{
int i;
for( i=0;teshu[i];++i)
{
if(teshu[i]==ch)
{
return 1;
}
}
return 0;
}
int main()
{
char str[100] ;
int flag[4];
int i;
while(scanf("%s",str)!=EOF)
{
if(strlen(str)<8||strlen(str)>16) //长度是否处于8-16之间
{
printf("NO\n");
continue;
}
flag[0]=flag[1]=flag[2]=flag[3]=0;
for(i=0;i='0'&&str[i]<='9')flag[0]=1;
if(str[i]>='a'&&str[i]<='z')flag[1]=1;
if(str[i]>='A'&&str[i]<='Z')flag[2]=1;
if(isTeshu(str[i]))flag[3]=1;
}
if(flag[0]+flag[1]+flag[2]+flag[3]>=3)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}
(1)找规律后可以发现,横纵坐标奇偶性不同时为白色,反之为黑色
(2)利用此规律,先将x,y坐标的奇偶性判断出来
(3)再针对不同的情况返回不同的值即可
代码如下:
bool squareIsWhite(char * coordinates)
{
int x= coordinates[0]-'a',y=coordinates[1]-'1';//奇偶性同,偶数;反之奇数
if(x%2==1&&y%2==1)
{
return 0;
}
else if(x%2==1&&y%2==0)
{
return 1;
}
else if(x%2==0&&y%2==0)
{
return 0;
}
return 1;
}
(1)遍历给我们的字符串
(2)当出现A或B时,进行相应的运算,直至循环结束
(3)返回x+y的值即可
代码如下:
int calculate(char* s){
int x=1,y=0;
for(int i=0;s[i];++i)
{
if(s[i]=='A')
{
x=2*x+y;
}
if(s[i]=='B')
{
y=2*y+x;
}
}
return x+y;
}
(1)只需要判断二维数组中,每一行的第二个字符是+还是-即可
代码如下:
int finalValueAfterOperations(char ** operations, int operationsSize){
int x=0;
for(int i=0;i