• C语言牛客网(NowCoder)刷题篇


    大家好我是沐曦希💕


    给大家介绍一款超牛的斩获大厂offer利器——牛客网
    在这里插入图片描述

    1.图片整理

    题目链接:HJ34 图片整理
    在这里插入图片描述

    思路

    这道题考察的其实就是字符排序,每个 ascii 字符在内存都有一个对应的 ascii 值,通过内存中数据的存储进行排序就行。
    冒泡排序:相邻数据之间进行比较交换,将较大或较小的数据向后推到数组末尾,然后开始下一轮次大数据的冒泡过程。

    代码

    //code1
    #include
    #include
    int cmp(const void* e1, const void* e2)
    {
        return (*(char*)e1 - *(char*)e2);
    }
    int main()
    {
        char arr[1001];
        gets(arr);
        int len = strlen(arr);
        qsort(arr,len,1,cmp);
        printf("%s\n",arr);
        return 0;
    }
    //code2
    #include 
    int main()
    {
    	char str[1024] = {0};
    	while(gets(str)) 
    	{
    		int len = strlen(str);
    		for (int i = 0; i < len; i++)
    		 {
    			for (int j = 1; j < len - i; j++)
    			 {
    				if (str[j] < str[j - 1])
    				 {
    					char ch = str[j - 1];
    					str[j - 1] = str[j];
    					str[j] = ch;
    				}
    			}
    		} 
    		printf("%s\n", str);
    	} 
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    2.数字在升序数组中出现的次数

    题目链接:JZ53 数字在升序数组中出现的次数
    在这里插入图片描述

    思路

    暴力破解:双重循环遍历数组,对每个元素判断是否是其他元素的两倍。或者先遍历一遍找出最大值,然后遍历一遍判断是否是其他数字二倍。
    更优思想:一次遍历找出最大的数字和次大的数字,判断最大的数字是否是次大数字2倍即可。

    代码

    int dominantIndex(int* nums, int numsSize){
    	if (numsSize == 1) return 0;//特殊情况只有一个元素则特殊处理
    	int max, sec, idx;
    	//先对最大和次大进行选择赋值,注意max和sec不能随意赋初值,因为有可能你赋予的初值就是最大值
    	//因此要使用数组中的数据进行初值赋予。
    	if (nums[0] > nums[1]) 
    	{
    		max = nums[0];
    		idx = 0;
    		sec = nums[1];
    	}
    	else 
    	{
    		max = nums[1];
    		idx = 1;
    		sec = nums[0];
    	} 
    	for (int i = 2; i < numsSize; i++) 
    	{
    		if (nums[i] > max) 
    		{ //当前元素大于max,则意味着要替换
    			sec = max; //先将原先最大的保存到sec中,则他就是次大的
    			max = nums[i]; //再将最大的放到max中
    			idx = i; //保存max值的下标
    		}
    		else if (nums[i] > sec)
    		{
    		//避免刚好nums[0]就是最大的情况,因为不切换最大而导致次大无法判断情况
    			sec = nums[i];
    		}
    	} 
    	if (max >= sec * 2) 
    	{
    		return idx;
    	} 
    	return -1;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    3.密码检查

    题目链接:OR141 密码检查
    在这里插入图片描述

    思路

    这道题只需要将字符串从头到尾的每种字符(大写字符,小写字符,数字,其他字符)分别统计出来后。然后逐个判
    断是否符合条件即可。而条件的判断包含有:
    1.长度不小于8
    2.不能以数字开头
    3.只能包含字母和数字
    4.大小写和字符必须具备两种以上

    代码

    #include
    int main(void)
    {
        int n,i,j,a=0,b=0,c=0;
        scanf("%d",&n);
        char arr[100];
        for(i=0;i<n;i++)
        {
            scanf("%s",&arr);
            if(strlen(arr) < 8)
            {
                printf("NO\r\n");
                continue;
            }
            if(isdigit(arr[0]) != 0)
            {
                printf("NO\r\n");
                continue;
            }
            for(j=1;j<100;j++)
            {
                if(islower(arr[j]) != 0)
                {
                    a++;
                }
                if(isupper(arr[j] != 0))
                {
                    b++;
                }
                if(isdigit(arr[i]) != 0)
                {
                    c++;
                }
            }
            if(a == sizeof(arr) || b == sizeof(arr) || c == sizeof(arr))
            {
                printf("NO\r\n");
                continue;
            }
            printf("YES\r\n");
        }
     
        return 0;
    }    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    4.写在最后

    那么就到这里了。
    在这里插入图片描述

  • 相关阅读:
    LTC3307AHV 符合EMI标准,降压转换器 QCA7005-AL33 PHY
    java毕业设计的影视资讯管理系统(附源码、数据库)
    阻止IP地址追踪的意义和编程实现
    【数据结构与算法】一文带你学透——算法分析
    Spring_AOP的理解
    如何处理微服务之间的通信和数据一致性?
    一种计算整数位1个数的新方法
    LeetCode 练习——剑指 Offer 66. 构建乘积数组
    [LeetCode解题报告] 522. 最长特殊序列 II
    吉林大学高级程序设计(红皮书例题)(1~7章)
  • 原文地址:https://blog.csdn.net/m0_68931081/article/details/126499361