Day1
题目一:
题目描述:
解题思路:
寻找丢失的数字相对复杂,可能有以下两种情况:
为了寻找丢失的数字,需要在遍历已排序数组的同时记录上一个元素,然后计算当前元素与上一个元素的差。考虑到丢失的数字可能是 111,因此需要将上一个元素初始化为 000。
代码实现:
int cmp(int* a, int* b)
{
return *a - *b;
}
int* findErrorNums(int* nums, int numsSize, int* returnSize)
{
int* errorNums = malloc(sizeof(int) * 2);
*returnSize = 2;
qsort(nums, numsSize, sizeof(int), cmp);
int prev = 0;
for (int i = 0; i < numsSize; i++)
{
int curr = nums[i];
if (curr == prev)
{
errorNums[0] = prev;
} else if (curr - prev > 1)
{
errorNums[1] = prev + 1;
}
prev = curr;
}
if (nums[numsSize - 1] != numsSize)
{
errorNums[1] = numsSize;
}
return errorNums;
}
结果情况:
符合题目要求,问题得到解决。
题目二:
题目描述:
解题思路:
这道题的关键就是判断字符串长度和首元素即可。
代码实现:
#include<stdio.h>
#include<string.h>
int main()
{
char arr[101] = { 0 };
int n = 0;
scanf("%d", &n);
int i = 0;
int j = 0;
//控制总输入次数
for (i = 0; i < n; i++)
{
int flag = 0;
int flag1 = 0;
int flag2 = 0;
scanf("%s", arr);
int sz = strlen(arr);
//判断字符串长度和首元素
if(arr[0] >= '0' && arr[0] <= '9' || sz < 8)
{
printf("NO\n");
continue;
}
//判断条件1,3
for (j = 0; j < sz; j++)
{
if (arr[j] >= 'a' && arr[j] <= 'z')
flag = 1;
else if (arr[j] >= 'A' && arr[j] <= 'Z')
flag1 = 1;
else if (arr[j] >= '0' && arr[j] <= '9')
flag2 = 1;
else
{
printf("NO\n");
continue;
}
}
if (flag + flag1 + flag2 >= 2)
printf("YES\n");
}
return 0;
}
结果情况:
符合题目要求,问题得到解决。