C语言之习题练习集

news2024/9/23 1:31:18

在这里插入图片描述

💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞

文章目录

  • 牛客网题号: JZ17 打印从1到最大的n位数
  • 牛客网题号: HJ73 计算日期到天数转换
  • 牛客网题号: HJ76 尼科彻斯定理
  • 牛客网题号: HJ100 等差数列
  • 牛客网题号: HJ97 记负均正
  • leetcode 题号:645. 错误的集合
  • 牛客网题号: OR141 密码检查
  • 牛客网题号: JZ53 数字在升序数组中出现的次数
  • leetcode 题号:面试题 05.06. 整数转换
  • leetcode 题号:747. 至少是其他数字两倍的最大数
  • leetcode 题号:349. 两个数组的交集
  • 牛客网题号: HJ34 图片整理
  • leetcode 题号:724. 寻找数组的中心下标
  • 牛客网题号: HJ10 字符个数统计
  • leetcode 题号:169. 多数元素

牛客网题号: JZ17 打印从1到最大的n位数

描述
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

  1. 用返回一个整数列表来代替打印
  2. n 为正整数,0 < n <= 5
int* printNumbers(int n, int* returnSize ) {
    *returnSize = pow(10,n)-1;
    int* arr = (int*)malloc(sizeof(int) * *returnSize);//动态申请扩容,共是*returnSize * int 个字节

    for(int i = 0 ;i <*returnSize ; i++)
    {
        arr[i] = i+1;
    } 
    return arr;
}

牛客网题号: HJ73 计算日期到天数转换

根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。

#include <stdio.h>
int is_leap_year(int year)
{
    if(year % 400 == 0 || (year % 100 != 0 && year % 4 == 0))
    {
        return 1;
    }
return 0;

}
int main() {
    int month_day[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int year,month,day;
    while (~scanf("%d %d %d", &year, &month,&day)) { 
        int total_day = day;
        if(is_leap_year(year) && month > 2 )
        total_day +=1;  //比二月大且是闰年加一天

        for(int i = month - 1 ; i > 0 ; i--)//i不等于0是因为创建数组时month_day[0]==0
        {
            total_day += month_day[i];
        }
        printf("%d ",total_day);
    }
    return 0;
}

牛客网题号: HJ76 尼科彻斯定理

验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。

例如:

1^3=1

2^3=3+5

3^3=7+9+11

4^3=13+15+17+19

#include <stdio.h>
int main() {
    int a;
    while (scanf("%d", &a) != EOF) { 
        int start = a * a - (a - 1);//有题意可知起始奇数公式为 m*m-(m-1)
        printf("%d",start);
        for(int i = 1 ; i < a ; i++)
        {
            printf("+%d",start + 2 * i);
        } 
        printf("\n");
    }
    return 0;
}

牛客网题号: HJ100 等差数列

等差数列 2,5,8,11,14。。。。
(从 2 开始的 3 为公差的等差数列)
输出求等差数列前n项和

#include <stdio.h>
int  SUM(int a)
{
    return 2+(a-1)*3;
}

int main() {
    int a=0;
    scanf("%d", &a);
    int sum = 0;
    for(int i = 0; i < a ; i++)
    {
        sum +=SUM(i+1);
    }
    printf("%d",sum);
    return 0;
}

牛客网题号: HJ97 记负均正

描述
首先输入要输入的整数个数n,然后输入n个整数。输出为n个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。
0即不是正整数,也不是负数,不计入计算。如果没有正数,则平均值为0。

#include <stdio.h>

int main() {
    int n = 0;
    scanf("%d",&n);
    int tmp =0;
    float sum = 0.0;
    int count_sum = 0;
    int count_num = 0;
    for(int i = 0 ; i < n ; i++)
{
    scanf("%d",&tmp);
    if(tmp > 0)
    {
        sum += tmp;
        count_sum++; 
    }
    else if(tmp < 0)
        count_num++;
}

if(count_sum == 0)
printf("%d 0.0",count_num);
else
printf("%d %.1lf\n",count_num,sum/count_sum);
    return 0;
}

leetcode 题号:645. 错误的集合

集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。
给定一个数组 nums 代表了集合 S 发生错误后的结果。
请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

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

    *returnSize =2;
    int* ret = (int*)malloc(sizeof(int) * 2);
    int* arr = (int*)calloc(numsSize+1,sizeof(int));
    int sum = 0;
    int sum2 = 0;
    for(int i = 0;i<numsSize;i++)
    {
        if(arr[nums[i]] == 1)
        ret[0] = nums[i];

        arr[nums[i]] = 1;
        sum += i+1;
        sum2 += nums[i];
    }


    ret[1] = sum - (sum2 - ret[0]);
    free(arr)
    return ret;
}

牛客网题号: OR141 密码检查

小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求:

  1. 密码只能由大写字母,小写字母,数字构成;
  2. 密码不能以数字开头;
  3. 密码中至少出现大写字母,小写字母和数字这三种字符类型中的两种;
  4. 密码长度至少为8
    现在小明受到了n个密码,他想请你写程序判断这些密码中哪些是合适的,哪些是不合法的。
int main() {//数组名不可以直接++,可以用一个指针指向数组名
   int  n =0;
   scanf("%d" ,&n);
   for(int i = 0 ; i < n ; i++)
   {
        int flag_num = 0;
        int flag_low = 0;
        int flag_cap = 0;
        int other = 0;
        char str [101]={0};
        char* cur =str;
        scanf("%s" ,str);
      
     
         if( *cur>= '0' && * cur <= '9' )
            {
                printf("NO\n");
                continue;
            }
        if(strlen(cur) < 8)
            {
                printf("NO\n");
                continue;
            }
        while(*cur != '\0')
        {
            if(*cur >= 'A' && *cur <= 'Z' )
                flag_cap = 1;
            else   if( *cur >= 'a' && *cur<= 'z')
                flag_low = 1;
            else   if(*cur <= '9' && *cur >='0')
                flag_num = 1;
            else
                other++;
            cur++; 
        }
        if(other >0)
        {
            printf("NO\n");
            continue;
        }
       
        if((flag_cap >0) + (flag_low>0) + (flag_num>0) >= 2)
        printf("YES\n");
   }
    return 0;
}

牛客网题号: JZ53 数字在升序数组中出现的次数

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B

int get_bin_cout(int num)
{
    int count = 0;
    for(int i =0 ; i < 32 ;i++)//4个字节32个比特位
    {
        if((num >> i) & 1)//&的作用是 (0 ,1) & 0 == 0  1 & 1 == 1
        count++;
    }
    return count;
}
int convertInteger(int A, int B){
    return  get_bin_cout(A^B);//^的作用是相同为0相异为一
}

leetcode 题号:面试题 05.06. 整数转换

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B


int get_bin_cout(int num)
{
    int count = 0;
    for(int i =0 ; i < 32 ;i++)
    {
        if((num >> i) & 1)
        count++;
    }
    return count;
}
int convertInteger(int A, int B){
    return  get_bin_cout(A^B);
}

leetcode 题号:747. 至少是其他数字两倍的最大数

给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。

请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1

int dominantIndex(int* nums, int numsSize){

int max_1 =0;
int max_2 =0;
if(nums[1] > nums[0])
{
    max_1 = 1;
    max_2 = 0;
}
else

{
    max_1 = 0;
    max_2 = 1;
}

for(int i = 2 ; i < numsSize ; i++)
{
    if(nums[i] > nums[max_1])
    {
        max_2 = max_1;
        max_1 = i;
    }
    else
    {
        if(nums[max_2] < nums[i])
        max_2 = i;
    }
}
int cur  = nums[max_2] * 2;
if(cur <=  nums[max_1])
return max_1;
else
return -1;
}

leetcode 题号:349. 两个数组的交集

给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){

*returnSize = 0;
static int arr[1000];
int i=0;
int j =0;
int n=0;
for(i = 0 ; i< nums1Size ;i++)
{
    for( j = 0 ; j < nums2Size ; j++)
    {
        if(nums1[i] == nums2[j])//判断两个数组中是否有相同元素
            break;  
    }
    if( j == nums2Size)//遍历一遍后是否存在
        continue;

    for( n =0 ; n < *returnSize ;n++)
    {
        if(nums1[i] == arr[n])
            break;
    }
    if(n == *returnSize)
   {
        arr[*returnSize] = nums1[i];
        *returnSize += 1;
   }
}
return arr;
}

牛客网题号: HJ34 图片整理

描述
Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过代码解决。
Lily使用的图片使用字符"A"到"Z"、“a"到"z”、"0"到"9"表示

#include <stdio.h>
#include <string.h>
int main() {//冒泡排序
    char arr[1000] = {0};
    scanf("%s",arr);
    int len = strlen(arr);
    for(int i = 0 ; i < len-1;i++)
    {
        for(int j = 0 ; j < len -1-i ; j++)
        {
            if(arr[j] > arr[j+1])
            {
                char kmp = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = kmp;
            }
        }
    }
    printf("%s",arr);
    return 0;
}

leetcode 题号:724. 寻找数组的中心下标

编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

int pivotIndex(int* nums, int numsSize){//两次循环,外层循环找下标,内增循环总计左右之和

for(int i =0 ; i < numsSize ;i++)
{
    int sum_l = 0;
    int sum_r = 0;
    for(int j = 0 ; j < numsSize ; j++)
    {
        if(j < i)
        {
            sum_l += nums[j];
        }
        else if(j > i)
        {
            sum_r += nums[j];
        }
    }
    if(sum_l == sum_r)
    return i;
}
return -1;
}

牛客网题号: HJ10 字符个数统计

描述
编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次
例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。

#include <stdio.h>
#include <string.h>
int main() {
    char arr[500] ={0};
    scanf("%s",arr);
    char str [500] ={0};
    int len = strlen(arr);
    int count =0;
    for(int i =  0 ; i < len ;i++)
    {
        if(str[arr[i]] == 0)//把重复的元素当成下标,并标志1
        {
            count++;
        }
        str[arr[i]] = 1;
    } 
    printf("%d",count);
    return 0;
}
//写法二
#include <stdio.h>
#include <string.h>
int main() {
   
   char arr [501]={0};
   while(~scanf("%s",arr))
   {
        char str [500] ={0};
        char* cur =arr;//开辟新的数组当下标,并有一个指针来接收,因为数组名不可以++;
        int count = 0;
        while(*cur != '\0')
        {
            if(str[*cur] != 1)//
            {
                count++;
            }
            str[*cur++] = 1;
        }
    printf("%d\n",count);
   }
    return 0;
}

leetcode 题号:169. 多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

int majorityElement(int* nums, int numsSize){

int tmp = nums[0];
int count  = 1;

for(int i = 1 ; i < numsSize ; i++)
{
    if(nums[i] == tmp)
    {
        count++;
    }
    else
    {
        count--;
        if(count == 0)
        tmp = nums[i+1];//相邻判断,tmp迭代之后count为1
    }
}
return tmp;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/373054.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Laravel框架03:DB类操作数据库

Laravel框架03&#xff1a;DB类操作数据库一、概述二、数据表的创建与配置三、增删改操作1. 增加信息2. 修改数据3. 删除数据四、查询操作1. 取出基本数据2. 取出单行数据3. 获取一个字段的值4. 获取多个字段的值5. 排序6. 分页五、执行任意的SQL语句一、概述 按照MVC的架构&a…

详讲函数知识

目录 1. 函数是什么&#xff1f; 2. C语言中函数的分类&#xff1a; 2.1 库函数&#xff1a; 2.2 自定义函数 函数的基本组成&#xff1a; 3. 函数的参数 3.1 实际参数&#xff08;实参&#xff09;&#xff1a; 3.2 形式参数&#xff08;形参&#xff09;&#xff1a; …

我那点浅薄的MOS模拟集成电路基础

记录研究生课程模拟集成电路设计所学到的一些知识&#xff0c;这门课是由刘老师和周老师一起上的&#xff0c;刘老师讲模拟集成部分这个模集跟模电还是有很大的区别的&#xff0c;模拟集成主要是针对MOS器件的集成&#xff0c;学得更专业也更深&#xff1b;而周老师讲的是信号检…

华为OD机试题,用 Java 解【图片整理】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

Yolov3,v4,v5区别

网络区别就不说了&#xff0c;ipad笔记记录了&#xff0c;这里只说其他的区别1 输入区别1.1 yolov3没什么特别的数据增强方式1.2 yolov4Mosaic数据增强Yolov4中使用的Mosaic是参考2019年底提出的CutMix数据增强的方式&#xff0c;但CutMix只使用了两张图片进行拼接&#xff0c;…

前端组件库自定义主题切换探索-02-webpack-theme-color-replacer webpack 的实现逻辑和原理-02

接上一篇&#xff1a;《前端组件库自定义主题切换探索-02-webpack-theme-color-replacer webpack 的实现逻辑和原理-01》 上一篇说到&#xff0c;在Handler.js的this.options下面的代码&#xff0c;this.assetsExtractor new AssetsExtractor(this.options)&#xff0c;表明op…

【C++】类与对象理解和学习(下)

放在专栏【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;建议先看完【C】类与对象理解和学习&#xff08;上&#xff09;【C】类与对象理解和学习&#xff08;中&#xff09;本章知识点概括Ⅰ本章知识点概括Ⅱ初始化列表前言在上一篇文章中&#xff0c;…

笔记本一锁屏程序就结束(锁屏程序结束、锁屏程序退出)(在此时间后关闭硬盘、硬盘关闭)(计算机空闲状态)

笔记本一锁屏程序就结束原因问题背景问题原因在此时间后关闭硬盘何为“空闲状态”&#xff1f;解决办法问题背景 我用向日葵开了个远程连接我家里的电脑&#xff0c;但是我的笔记本一锁屏&#xff0c;过了一会回来再打开&#xff0c;向日葵就自动结束了&#xff0c;不知道咋回…

解决前端组件下拉框选择功能失效问题

问题&#xff1a; 页面下拉框选择功能失效 现象&#xff1a; 在下拉框有默认值的情况下&#xff0c;点击下拉框的其他值&#xff0c;发现并没有切换到其他值 但是在下拉框没默认值的情况下&#xff0c;功能就正常 原因 select 已经绑定选项&#xff08;有默认值&#xff09; 在…

CXL技术分析

CXL&#xff0c;全称Compute Express Link&#xff0c;该技术由Intel牵头开发用于高性能计算、数据中心&#xff0c;主要解决处理器、加速器和内存之间的cache一致性问题&#xff0c;可消除CPU、专用加速器的计算密集型工作负载的传输瓶颈&#xff0c;显著提升系统性能。 一、…

HashMap 面试专题

1、HashMap 的底层结构 ①JDK1.8 以前 JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的hashCode 函数处理过后得到 hash 值&#xff0c;然后通过 (n - 1) & hash 判断当前元素存放的位置&#xff08;这里的 n 指的是数组的长度…

SpringBoot知识快速复习

Spring知识快速复习启动器自动装配ConfigurationImport导入组件Conditional条件装配ImportResource导入Spring配置文件ConfigurationProperties配置绑定Lombok简化开发dev-toolsyaml请求和响应处理静态资源规则与定制化请求处理-Rest映射请求处理-常用参数注解使用请求处理-Ser…

程序员在小公司(没有大牛,人少)怎么成长?

大多数小公司都是创业公司&#xff0c;所以它们有着非常独特的“创业心态”。所谓创业心态通常表现为关注快速增长&#xff0c;竭尽所能让公司盈利&#xff0c;或者达成其他一些迫切目标。 在这样一家公司工作的软件开发人员&#xff0c;你极有可能要身兼多职&#xff0c;不能…

拼数(一般贪心)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题号&#xff1a;NC16783 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 设有n个正整…

架构初探-学习笔记

1 什么是架构 有关软件整体结构与组件的抽象描述&#xff0c;用于指导软件系统各个方面的设计。 1.1 单机架构 所有功能都实现在一个进程里&#xff0c;并部署在一台机器上。 1.2 单体架构 分布式部署单机架构 1.3 垂直应用架构 按应用垂直切分的单体架构 1.4 SOA架构 将…

华为OD机试题,用 Java 解【停车场车辆统计】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

基于node.js+vue开发的学生考勤管理系统84y43

目录 1 绪论 6 1.1 课题背景 6 1.2 课题研究现状 6 1.3 初步设计方法与实施方案 7 1.4 本文研究内容 7 2 系统开发环境 9 2.1 vue简介 9 2.3 B/S结构简介 9 2.4MySQL数据库 10 3 系统分析 11 3.1 系统可行性分析 11 3.1.1 经济可行性 11…

2023淘宝天猫38节红包满减优惠活动时间是从几月几号什么时候开始?

2023年淘宝天猫38节活动将于2023年3月2日中午12点正式开始&#xff0c;活动将持续至2023年3月8日晚上23点59分。届时&#xff0c;淘宝天猫将推出一系列的优惠活动和红包福利&#xff0c;为广大女性用户送上节日的祝福和福利。在这个特别的节日里&#xff0c;淘宝天猫为女性用户…

数据结构---单链表

专栏&#xff1a;数据结构 个人主页&#xff1a;HaiFan. 专栏简介&#xff1a;从零开始&#xff0c;数据结构&#xff01;&#xff01; 单链表前言顺序表的缺陷链表的概念以及结构链表接口实现打印链表中的元素SLTPrintphead->next!NULL和phead!NULL的区别开辟空间SLTNewNod…

多分类、正则化问题

多分类问题 利用逻辑回归解决多分类问题&#xff0c;假如有一个训练集&#xff0c;有 3 个类别&#xff0c;分别为三角形 &#x1d466; 1&#xff0c;方框&#x1d466; 2&#xff0c;圆圈 &#x1d466; 3。我们下面要做的就是使用一个训练集&#xff0c;将其分成 3 个二…