《C语言入门100例》---第17题

 目录

一、题目描述

二、课后习题

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<str[i];++i)
		{
			if(str[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.题目

方法:

(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;

}

力扣截图

2.题目

方法:

(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;

}

力扣截图

 3.题目

方法

(1)只需要判断二维数组中,每一行的第二个字符是+还是-即可

代码如下:

int finalValueAfterOperations(char ** operations, int operationsSize){
    int x=0;
    for(int i=0;i<operationsSize;++i)
    {
        if(operations[i][1]=='+')
        {
            x+=1;
        }
        else
        {
            x-=1;
        }
    }

    return x;
}

力扣截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胤凯o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值