【知识碎片】2024_05_08

 记录了两个代码和一个C语言switch的题。代码【错误的集合】使用到了hash,【密码检查】是对多个字符串输入的检查,有一些条件细节。两个代码都是关于数组内容操作的题目。


 每日代码

1.错误的集合

错误的集合-力扣(LeetCode

也是数组的操作,注意此题要对参数 *returnSize 进行传值。

int* findErrorNums(int* nums, int numsSize, int* returnSize) {

    int* returnnums = (int*)malloc(sizeof(int)*2);
    *returnSize = 2;

    int rep = 0;
    int sum = 0;

    int* hash = (int*) malloc(sizeof(int)*(numsSize + 1));
    for(int i = 0; i <= numsSize; i++){
        hash[i] = 0;
    }

    for(int i = 0; i < numsSize; i++){
        ++hash[nums[i]];
        if(hash[nums[i]] == 2)  rep = nums[i];
        sum += nums[i];
    }

    returnnums[0] = rep;
    int num = (1 + numsSize)*numsSize / 2 - sum;
    returnnums[1] = rep + num;

    return returnnums;
}

2.密码检查

密码检查_牛客题霸_牛客网

检查一下输入的数组是否符合以下要求,有n个输入。

#include <stdio.h>
#include <string.h>

int main() {
    int n = 0;
    scanf("%d",&n);
    for(int x = 0; x < n; ++x){
        char password[100] = {0};
        scanf("%s",password);
        int length = strlen(password);
        //记录各种类型出现的次数
        int count_num = 0;
        int count_up = 0;
        int count_down = 0;
        for(int i = 0; i < length; ++i ){
            if(length < 8){
                printf("NO\n");
                break;
            }
            else if(password[0] >= '0' && password[0] <= '9') 
            {
                printf("NO\n");
                break;
            }
            if(password[i] >= '0' && password[i] <= '9'){
                count_num++;
            }
            else if(password[i] >= 'a' && password[i] <= 'z'){
                count_down++;
            }
            else if(password[i] >= 'A' && password[i] <= 'Z'){
                count_up++;
            }
            else{
                printf("NO\n");
                break;
            }
        }
        if(count_num + count_down + count_up == length){
            if((count_num > 0 ) + (count_down > 0) + (count_up > 0) >= 2){
                printf("YES\n");
            }
            else {
                printf("NO\n");
            }
        }
    }
    return 0;
}

  if((count_num > 0 ) + (count_down > 0) + (count_up > 0) >= 2)

这里实现的是密码要至少两种字符类型,这是我之前没想到的(只会超长的条件判断)。


C语言破碎知识

今日掉坑

若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是( )

#include <stdio.h>
int main()
{
char c;
int v0=0,v1=0,v2=0;
do
{
switch(c=getchar())
{
case'a':case'A':
case'e':case'E':
case'i':case'I':
case'o':case'O':
case'u':case'U':v1 += 1;
default:v0+= 1;v2+=1;
}
}while(c!='\n');
printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);
return 0;
}

A: v0=7,v1=4,v2=7 B: v0=8,v1=4,V2=8 C: v0=11,v1=4,v2=11 D: v0=12,v1=4,v2=12

答案:D

因为switch语句中没有break;所以即使是AEIOU也会使v0,v2的值增加。


-The End-

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王_哈_哈 Jw

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

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

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

打赏作者

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

抵扣说明:

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

余额充值