C语言之练习题合集

news/2025/2/15 16:27:29/

在这里插入图片描述

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

文章目录

  • leetcode 题号:728. 自除数
  • leetcode 题号:238. 除自身以外数组的乘积
  • leetcode 题号:448. 找到所有数组中消失的数字
  • leetcode 题号:485. 最大连续 1 的个数
  • 牛客网题号: HJ37 统计每个月兔子的总数
  • 牛客网题号: ZJ16 数列的和
  • 牛客网题号: HJ56 完全数计算
  • 牛客网题号: HJ11 数字颠倒
  • 牛客网题号: HJ31 单词倒排
  • 牛客网题号: NC61 两数之和
  • 牛客网题号: KS33 寻找奇数
  • 牛客网题号: HJ46 截取字符串

leetcode 题号:728. 自除数

自除数 是指可以被它包含的每一位数整除的数。
例如,128 是一个 自除数 ,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。
自除数 不允许包含 0 。
给定两个整数 left 和 right ,返回一个列表,列表的元素是范围 [left, right] 内所有的 自除数

int* selfDividingNumbers(int left, int right, int* returnSize){
int* ret = (int*)malloc(sizeof(int) * 1000);
*returnSize = 0;
for(int i = left ; i <= right ; i++)
{int num =i;while(num){int reminder = num % 10;//if(reminder == 0 || (i % reminder) != 0)//自除数不可以为0,且除以自己的每一位数等于0break;//个人理解 使用break这种跳出循环的语句,可以判断是遍历一遍,还是突然跳出num /= 10;}if(num == 0)ret[(*returnSize)++] = i ;
}
return ret;
}

leetcode 题号:238. 除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。

题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内

int* productExceptSelf(int* nums, int numsSize, int* returnSize){
int* ret =(int*)malloc(sizeof(int) * numsSize);
*returnSize = numsSize;
int left =1;
int right =1;
for(int i = 0; i< numsSize ;i++)
{ret[i] = left;// ret[i]储存 i个之前的乘积共(i-1)乘积left *= nums[i];//为下次ret[i+1] 做准备
}   
for(int i = numsSize-1 ;i >= 0 ;i--)
{ret[i] *= right; //同理right *= nums[i];
}
return ret;
}

leetcode 题号:448. 找到所有数组中消失的数字

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果

int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize){for(int i = 0 ; i < numsSize ; i++)
{if(nums[abs(nums[i]) - 1] >0)//因为输入1——n的数字,所以下标为0——n-1 ,找到下标对应的元素并乘以-1,遍历一遍之后,还是正数的元素,则是缺少的元素nums[abs(nums[i]) - 1] = -(nums[abs(nums[i]) - 1]);
}
int* ret = (int*)malloc(sizeof(int) * numsSize);
*returnSize = 0;
for(int i = 0 ; i < numsSize ; i++)
{if(nums[i] > 0){ret[*returnSize] = i+1;//因为刚开始数组每个元素-1,并成为下标,找到缺少的下标之后,需要+1*returnSize +=1;}
}
return ret;
}

leetcode 题号:485. 最大连续 1 的个数

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

int findMaxConsecutiveOnes(int* nums, int numsSize){int count = 0;
int max = 0;
for(i
#  牛客网题号: HJ31 单词倒排
对字符串中的所有单词进行倒排。说明:1、构成单词的字符只有26个大写或小写英文字母;2、非构成单词的字符均视为单词间隔符;3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;4、每个单词最长20个字母;
```c
#include <stdio.h>int main() {char str [10001] ={0};int row = 0 ;while(gets(str) > 0){char* ptr = str;char* word[10001]= {NULL};while(*ptr != '\0')//思路开始首字母在合格范围内,则加入指针数组,并循环检测,并'\0'来结尾{if((*ptr >= 'a' && *ptr <= 'z')  ||( *ptr >= 'A' && *ptr <= 'Z' )){ word[row++] = ptr;、、while ((*ptr >= 'a' && *ptr <= 'z')  ||( *ptr >= 'A' && *ptr <= 'Z' )){ptr++;}}*ptr = '\0';ptr++;}int i =0;for( i = row -1; i >= 0 ;i--){printf("%s ",word[i]);}printf("\n");}return 0;
}

牛客网题号: HJ37 统计每个月兔子的总数

有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。
例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。
一月的时候有一只兔子,假如兔子都不死,问第n个月的兔子总数为多少?

方法一(递归实现)
#include <stdio.h>
int Fib(int a)
{if(a <= 2)return 1;elsereturn Fib(a-1)+Fib(a-2);
}int main() {int count =0;scanf("%d",&count);printf("%d" , Fib(count));return 0;
}方法二
#include <stdio.h>
int main() {int n =0;scanf("%d" ,&n);int a = 1;int b = 1;int c = 2;for(int i = 3 ; i <= n ; i++){c = a + b; a = b;b = c;}printf("%d",c);return 0;
}

牛客网题号: ZJ16 数列的和

数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和

#include <stdio.h>
#include <math.h>
int main() {double num = 0;int a = 0;while(~scanf("%lf %ld",&num,&a)){double sum = 0.0;for(int i = 0 ; i < a ; i++){sum += num;num = sqrt(num);}printf("%.2lf\n" ,sum);}return 0;
}

牛客网题号: HJ56 完全数计算

完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。

它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。

输入n,请输出n以内(含n)完全数的个数。

#include <stdio.h>
#include <math.h>
int is_perfect_number(int n)
{int sum = 1;for(int i = 2 ; i <= sqrt(n) ;i++){if(n % i == 0){sum += i;if(i != sqrt(n))sum += n/i;    }}if(sum == n)return 1;return 0;
}
int main() {int count = 0;int a = 0;scanf("%d",&a); for(int i = 2 ; i <= a ;i++){if(is_perfect_number(i) == 1)count++#include <stdio.h>
#include <string.h>
int main() {int n = 0;while (scanf("%d", &n) != EOF) { if(n == 0){printf("%d" ,n % 10);continue;}while(n){int tmp = (n%10) ;printf("%d",tmp);n /= 10;}}return 0;
}}printf("%d\n",count);return 0;
}

牛客网题号: HJ11 数字颠倒

输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001

#include <stdio.h>
#include <string.h>
int main() {int n = 0;while (scanf("%d", &n) != EOF) { if(n == 0){printf("%d" ,n % 10);continue;}while(n){int tmp = (n%10) ;printf("%d",tmp);n /= 10;}}return 0;
}

牛客网题号: HJ31 单词倒排

对字符串中的所有单词进行倒排。

说明:

1、构成单词的字符只有26个大写或小写英文字母;

2、非构成单词的字符均视为单词间隔符;

3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;

4、每个单词最长20个字母

#include <stdio.h>int main() {char str [10001] ={0};int row = 0 ;while(gets(str) > 0){char* ptr = str;char* word[10001]= {NULL};while(*ptr != '\0'){if((*ptr >= 'a' && *ptr <= 'z')  ||( *ptr >= 'A' && *ptr <= 'Z' )){ word[row++] = ptr;ptr++;while ((*ptr >= 'a' && *ptr <= 'z')  ||( *ptr >= 'A' && *ptr <= 'Z' )){ptr++;}}*ptr = '\0';ptr++;}int i =0;for( i = row -1; i >= 0 ;i--){printf("%s ",word[i]);}printf("\n");}return 0;
}

牛客网题号: NC61 两数之和

给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。

int* twoSum(int* numbers, int numbersLen, int target, int* returnSize ) {int* ret = (int*)calloc(2,sizeof(int));*returnSize = 2;for(int i = 0 ; i < numbersLen ; i++){ if(numbers[i] > target + 10)continue;for(int j = i + 1 ; j < numbersLen ;j++){if((numbers[i] + numbers[j]) == target){ret[0] = i + 1;ret[1] = j + 1;return ret; }}}*returnSize = 0;return NULL;
}

牛客网题号: KS33 寻找奇数

现在有一个长度为 n 的正整数序列,其中只有一种数值出现了奇数次,其他数值均出现偶数次,请你找出那个出现奇数次的数值。

#include <stdio.h>int main() {int n = 0;int tmp = 0;int num = 0;scanf("%d",&n);for(int i = 0 ; i < n ; i++){scanf("%d",&tmp);num ^= tmp;}printf("%d\n",num);return 0; 
}

牛客网题号: HJ46 截取字符串

输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出

#include <stdio.h>int main() {char str[100] ={0};int a =0;scanf("%s %d",str,&a);str[a] ='\0';printf("%s",str);return 0;
}

在这里插入图片描述


http://www.ppmy.cn/news/28620.html

相关文章

zabbix部署

文章目录前言一、zabbix简介二、zabbix下载与部署三、部署完成、访问前端测试前言 一、zabbix简介 Zabbix 是一个企业级分布式开源监控解决方案。Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制&#xff0c;允许用户为几乎任何事件配置…

Qt之QTableView自定义排序/过滤(QSortFilterProxyModel实现,含源码+注释)

一、效果示例图 1.1 自定义表格排序示例图 本文过滤条件为行索引取余2等于0时返回true&#xff0c;且从下图中可以看到&#xff0c;奇偶行是各自挨在一起的。 1.2 自定义表格过滤示例图 下图添加两列条件&#xff08;当前数据大于当前列条件才返回true&#xff0c;且多个列…

学习 Python 之 Pygame 开发魂斗罗(五)

学习 Python 之 Pygame 开发魂斗罗&#xff08;五&#xff09;继续编写魂斗罗1. 加载地图2. 修改角色尺寸和地面高度3. 添加玩家镜头移动4. 修改子弹的发射位置继续编写魂斗罗 在上次的博客学习 Python 之 Pygame 开发魂斗罗&#xff08;四&#xff09;中&#xff0c;我们完成…

Allegro如何删除铜皮上多余的空洞操作指导

Allegro如何删除铜皮上多余的空洞操作指导 在做PCB设计的时候,设计铜皮的时候是不希望铜皮上有多余的空洞的,设计完成前需要把多余的空洞删除,如下图 如何删除,具体操作如下 点击Shape点击Manual Void/Cavity

08_MySQL聚合函数

1. 聚合函数介绍什么是聚合函数聚合函数作用于一组数据&#xff0c;并对一组数据返回一个值。聚合函数类型AVG()SUM()MAX()MIN()COUNT()注意&#xff1a;聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。1.1 AVG和SUM函数可以对数值型数据使用AVG 和…

Linux(Centos)安装RabbitMQ+延时插件+开机自启动

安装目录1&#xff1a;前言1.1 系统环境1.2&#xff1a;安装版本1.3 简介2&#xff1a;安装2.1&#xff1a;安装前准备&#xff1a;2.2&#xff1a;安装Erlang2.3&#xff1a;安装RabbitMQ2.3&#xff1a;延迟依赖插件安装1&#xff1a;前言 1.1 系统环境 操作系统版本&#…

企业电子招标采购系统源码之项目说明和开发类型

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及…

Linux概述

1&#xff1a;Linux概述1.1&#xff1a;操作系统常见操作系统有&#xff1a;Windows、MacOS、Linux。名称描述Windows微软公司研发的收费操作系统。分为两类&#xff1a;用户操作系统、Server操作系统。用户操作系统&#xff1a;win 95、win 98、win NT、win Me、win xp、vista…