题目1—密码检查
题目描述:小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:
- 密码只能由大写字母,小写字母,数字构成;
- 密码不能以数字开头;
- 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
- 密码长度至少为8
现在小明受到了n个密码,他想请你写程序判断这些密码中哪些是合适的,哪些是不合法的。
输入描述:
输入一个数n,接下来有n(n≤100)行,每行一个字符串,表示一个密码,输入保证字符串中只出现大写字母,小写字母和数字,字符串长度不超过100。
输出描述:
输入n行,如果密码合法,输出YES,不合法输出NO
题目链接-----https://www.nowcoder.com/practice/f2fbd8f61c564ca0b5feaa63ab42dae5?tpId=182&&tqId=34867&rp=1&ru=/ta/exam-all&qru=/ta/exam-all/question-ranking
解题思路:
1首先输入n控制的是行数,判断每一行是否可行,所以大致结构用循环,另外注意题目中的数字是数字字符
2判断每一行是否符合,首先判断长度和不能以数字开头
3然后判断是否出现不是字母,数字构成的字符。
4然后上面的条件都不是,那么肯定就符合条件
来,看看代码
#include<stdio.h>
#include<string.h>
int main()
{
int n = 0;
scanf("%d", &n);
int i = 0;
for (i = 0; i < n; i++)
{
char arr[101] = { 0 };//字符长度不超过100,但是注意'\0'
scanf("%s", arr);
//首先判断长度和首字符
if ((*arr >= '0' && *arr <= '9') || strlen(arr) < 8)
{
printf("NO\n");
continue;
}
//判断数组中的字符种类
int j = 0, digit = 0, upper = 0, lower = 0, other = 0;
for (j = 0; j < strlen(arr); j++)
{
if (arr[j] >= 'a' && arr[j] <= 'z')
lower++;
else if (arr[j] >= 'A' && arr[j] <= 'Z')
upper++;
else if (arr[j] >= '0' && arr[j] <= '9')
digit++;
else
other++;
}
//如果other为0就表示有其他字符了
if (other != 0)
{
printf("NO\n");
continue;
}
//判断字符的种类是否小于2种
if (((lower > 0) + (digit > 0) + (upper > 0)) < 2)
{
printf("NO\n");
continue;
}
printf("YES\n");
}
return 0;
}
题目二-----整数转换
题目描述:编写一个函数,确定需要改变几个位才能将整数A转成整数B
题目链接–https://leetcode-cn.com/problems/convert-integer-lcci/
解题思路:
就是判断A和B有几个不同的bit位,先按位异或,将不同的bit位转换成1,再计算bit位
中1的个数即可
int convertInteger(int A, int B)
{
int x=A^B;
int i=0;
int count=0;
for(i=0;i<=31;i++)
{
if((x>>i)&1==1)
count++;
}
return count;
}
题目三----至少是其他数字的两倍的最大数
题目描述:给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。
请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。
如果是,则返回 最大元素的下标 ,否则返回 -1
题目链接:https://leetcode-cn.com/problems/largest-number-at-least-twice-of-others
解题思路:
大致思路:找到最大值和次大值,然后将最大值和次大值的两倍比较即可
这个找的过程·需要看代码,跟着代码过几遍思维流程。
因为这个看别人写的不如自己思考的有用
int dominantIndex(int* nums, int numsSize)
{
int m1 = -1, m2 = -1, pos = 0, i = 0;
for (i = 0; i < numsSize; i++)
{
if (nums[i] > m1)
{
m2 = m1;
m1 = nums[i];
pos = i;
}
else if (nums[i] > m2)
m2 = nums[i];
}
return m1 >= m2 * 2 ? pos : -1;
}