C语言经典习题
收录C语言经典习题并附详解
核动力C++选手
优秀的猎手要耐心等待机会!
展开
-
删除有序数组中的重复项
本质上是,j依次找跟i位置不相等值,依次从前往后覆盖存储。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。原创 2023-10-30 15:35:56 · 66 阅读 · 0 评论 -
交换奇偶位
那么如何得到一个数二进制位的奇数位和偶数位呢,假设我们想得到11111111的奇数位和偶数位,可以让这个二进制数分别按位与上01010101和10101010,这两个数就是0x55和0xaa,因此,对于一个整数,我们让其分别按位与0x55555555和0xaaaaaaaa即可得到奇数位和偶数位,然后让奇数位左移一位,偶数位右移一位,再相加即可。写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。原创 2023-10-19 17:44:00 · 127 阅读 · 0 评论 -
BC146 添加逗号
对于一个较大的整数 N(1<=N<=2,000,000,000),比如 980364535,我们常常需要一位一位数这个数字是几位数,但是如果在这 个数字每三位加一个逗号,它会变得更加易于朗读。对于这道题,我的想法就是把输入数字n的每一位存到一个字符数组中,同时每存3个数字就存一个' , ',直到把数字存完,获取每一位的思路就是先%10,然后/10,依次循环。因此,这个数字加上逗号成如下的模样:980,364,535请写一个程序帮她完成这件事情。输出:980,364,535。输入:980364535。原创 2023-10-19 15:32:37 · 71 阅读 · 0 评论 -
atoi函数及其模拟实现
那么具体是怎么样的呢。5.数字中间有其他字符。原创 2023-10-13 21:16:28 · 127 阅读 · 1 评论 -
找单身狗2
这样我们发现倒数第一位和倒数第二位的结果为1,原因是由于5和6二进制的倒数第一位和倒数第二位相异,那么不妨只考虑倒数第一个相异为1的那一位(即倒数第一位)(考虑倒数第二个相异为1的那一位也可),通过判断倒数第一位是0还是1把数组元素分成两类。我们不妨先把数组中的全部元素异或:1^2^3^4^5^1^2^3^4^6==5^6,5^6的二进制结果是。一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。例如:有数组的元素是:1,2,3,4,5,1,2,3,4,6,只有5和6只出现1次,要找出5和6。原创 2023-10-13 09:11:57 · 148 阅读 · 0 评论 -
找单身狗1
这种方法利用了异或的特点:相同为0,相异为1。另外,异或是支持交换律的,即3^5^3==3^3^5==5(大家不明白的话,可以写成二进制异或一下,就会豁然开朗,直接记住结论也行),那么我们可以利用异或的特点,将数组中每一个元素逐个异或到同一个数0上,那么最终异或的结果就是单身狗了。然而毕竟是暴力求解,这种求解方式的时间复杂度必然很高。相信大家能够写出暴力求解的代码,这里就不给出这种方法的代码了~一个数组中只有1个数字出现1次,其他数字都是成对出现,找出这个单身狗。原创 2023-10-13 08:19:11 · 82 阅读 · 0 评论 -
是谁还没听过杨氏矩阵~原理和实现代码都已经准备好了
我们观察杨氏矩阵的特点,如果我们让待查找的数字(假设为5)和右上角的元素(3)比较,如果该元素比右上角元素大,那么这一行元素都不是我们要找的,因为这一行都比右上角元素小(1,2都比3小),那就可以跳过第一行,右上角元素变成6,继续和待查找的数字5比较,发现6比5大,那么6及其所在列(6 9)都比5大,那么可以排除6所在的列,右上角元素变成5,这样就查找到我们待查的元素5,以此类推。有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。原创 2023-10-12 20:14:01 · 93 阅读 · 0 评论 -
猜名次(附完整代码)
我们可以创建a、b、c、d、e五个整形变量,让每个变量从1~5循环,做成一个嵌套循环,在嵌套循环的最中心判断每次的循环是否符合题目要求,如果满足题目要求,那么这就是最终结果。需要注意的是,在嵌套循环中,可能有多种情况满足要求(这道题乍看起来不知道如何下手,但其实代码很简单,重要的是我们要会。比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;),这就需要我们加以判别。原创 2023-10-10 14:39:41 · 127 阅读 · 0 评论 -
判断字符串旋转
(之前的博客)这种方法对每旋转一次后的字符串进行判断;第二,利用库函数,这种方法未必比第一种效率高,但是这种方法写起来很快。这篇博客重点介绍第二种方法。思路:将str1复制一遍追加到str1后边,判断str2是否是str1的子集即可。写一个函数,判断一个字符串是否为另一个字符串旋转后的字符串。这道题主要有两个思路:第一,利用。原创 2023-09-01 16:59:26 · 150 阅读 · 0 评论 -
C语言左旋字符串详解(付完整代码)
左旋字符串,实现一个函数,可以左旋字符串中的k个字符。例如:ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB。原创 2023-09-01 16:10:15 · 416 阅读 · 0 评论 -
BC34 进制A+B
难点:十六进制和八进制只是数据的一种表示形式,但是不管是十六进制还是八进制,在计算机里存储数据的时候都是二进制,所以,十六进制和八进制只是展示给我们的一种形式,器本质还是一个十进制数字。输入一个十六进制数a,和一个八进制数b,输出a+b的十进制结果(范围-2^31~2^31-1)。一行,一个十六进制数a,和一个八进制数b,中间间隔一个空格。一行,a+b的十进制结果。原创 2023-08-26 17:16:09 · 145 阅读 · 0 评论 -
BC77 有序序列插入一个数
思路:把数组中的每个元素从后往前和插入的数依次比较,直到遇到小于所插入元素的数,将待插入的数放到该数后边。有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。第二行输入N个升序排列的整数,输入用空格分隔的N个整数。第一行输入一个整数(0≤N≤50)。输出为一行,N+1个有序排列的整数。第三行输入想要进行插入的一个整数。原创 2023-08-21 19:51:40 · 284 阅读 · 0 评论 -
BC99 序列中整数去重
输入包含两行,第一行包含一个正整数n(1 ≤ n ≤ 1000),表示第二行序列中数字的个数;第二行包含n个整数(范围1~5000),用空格分隔。思路:从第一个元素开始,第一个元素和之后的元素逐个比较,重复则去重;再从第二个元素开始,之后的元素个第二个元素依次比较,重复则去重;输入n个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的整数,只保留该数第一次出现的位置,删除其余位置。输出为一行,按照输入的顺序输出去重之后的数字,用空格分隔。原创 2023-08-20 10:30:59 · 265 阅读 · 0 评论 -
BC96 有序序列判断
代码思路:设置升序flag1=0和降序flag2=0,如果为数组升序,则只有flag1被置1;如果数组为降序,则只有flag2被置1。因此,如果数组有序,那么flag1+flag2=1,否则flag1+flag2=2。输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。输出为一行,如果序列有序输出sorted,否则输出unsorted。数据范围:3≤n≤50 序列中的值都满足1≤val≤100。第一行输入一个整数N(3≤N≤50)。原创 2023-08-20 08:42:32 · 271 阅读 · 1 评论 -
BC100-有序序列排序
拜了个拜~原创 2023-07-29 13:55:55 · 90 阅读 · 0 评论 -
多组输入的两种解决方法-C语言
BC41-你是天才吗原创 2023-07-31 08:55:44 · 101 阅读 · 0 评论 -
获得月份天数(C语言)
输出描述:针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。输入描述:多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。原创 2023-08-05 19:05:37 · 984 阅读 · 1 评论 -
喝汽水问题(C语言)
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。原创 2023-08-05 21:01:57 · 46 阅读 · 0 评论 -
调整奇数偶数顺序
输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。1. 给定两个下标left和right,left放在数组的起始位置,right放在数组中最后一个元素的位置。a. 如果left和right表示的区间[left, right]有效,进行b,否则结束循环。d. 如果left和right都找到了对应的数据,则交换,继续a,c. right从后往前找,找到一个奇数后停止。b. left从前往后找,找到一个偶数后停止。2. 循环进行一下操作。原创 2023-08-05 21:34:31 · 691 阅读 · 0 评论 -
C语言编程实现杨辉三角
hello,小伙伴们大家好,这篇文章来讲解杨辉三角怎么用C语言实现。杨辉三角的规律:每一行的元素等于其正上方和左上方元素之和。知道了杨辉三角的规律,我们就可以编程来实现啦。原创 2023-08-03 14:24:34 · 298 阅读 · 0 评论 -
倒置字符串(C语言)
将一句话的单词进行倒置,标点不倒置。比如 "I like beijing.",经过处理后变为:"beijing. like I"。字符串长度不超过100。思路:现将整个字符串逆序,再分别将字符串中每一个单词逆序。由于多次使用到了逆序这个功能,可以将逆序封装为一个函数。:输入一个仅包含小写字母、空格、'.' 的字符串,长度不超过100。'.' 只出现在最后一个单词的末尾。:依次输出倒置之后的字符串,以空格分割。原创 2023-08-04 19:57:27 · 458 阅读 · 1 评论 -
打印水仙花数(C语言)
水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。求出0~100000之间的所有“水仙花数”并输出。原创 2023-08-05 20:21:37 · 190 阅读 · 0 评论 -
猜凶手(C语言)
思路:依次假定凶手是a-d,把四人的话变成一个判断条件,当这4个判断条件值之和==3时,则凶手是当前假定的人。日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。现在请根据这些信息,写一个程序来确定到底谁是凶手。已知3个人说了真话,1个人说的是假话。原创 2023-08-06 07:40:52 · 57 阅读 · 0 评论 -
求最小公倍数的3种方法(C语言)
2.a和b的最小公倍数,随便拿一个数,比如a,由小到大找出a的倍数,这其中肯定也有b的倍数,最小的那一个即为a和b的最小公倍数(拿出b同理)3.(最矬的方法)找出a和b中最大的那一个,赋值给m,然后m自增1,如果某个m第一次既能整除a又能整除b,那么这个m即为最小公倍数。它是指能同时被a和b整除的最小正整数,比如,3和7的公倍数有21,42,84等,21就是最小公倍数。以上三个方法中,方法1和2比较优秀,方法3效率低下,因为需要逐个值查找。1.辗转相除法:a和b的最小公倍数=a*b/(a和b的最大公约数)原创 2023-08-04 18:53:36 · 12591 阅读 · 9 评论 -
打印菱形(C语言)
用C语言在屏幕上输出以下图案。原创 2023-08-05 19:50:34 · 51 阅读 · 1 评论 -
模拟实现strcpy(超详细,基础版->改进版->最强版)
本文适合有一定C语言基础的同学查看~原创 2023-08-01 18:25:49 · 60 阅读 · 1 评论 -
变种水仙花数(C语言)
变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。例如:655 = 6 * 55 + 65 * 5 1461 = 1*461 + 14*61 + 146*1。求出 5位数中的所有 Lily Number。原创 2023-08-05 19:26:38 · 45 阅读 · 1 评论 -
C语言实现三子棋游戏
三子棋原创 2023-08-12 13:09:58 · 676 阅读 · 2 评论 -
猜数字游戏(保姆级教程,超详细)(C语言)
1.生成0-100的数字:rand函数生成的伪随机数,生成的随机数的范围是:0-RAND_MAX(32767),在生成随机数之前,要使用srand函数设置伪随机数的生成器,这就是我们上面遗留的问题,关于srand((unsigned int)time(NULL));猜数字游戏是这样设置的:电脑随机产生一个1-100的数字,接下来我们猜数字,如果猜小了,就告诉你猜小了,如果猜大了,就告诉你猜大了,如果猜对了,就恭喜你,游戏结束。game()函数可以分两部分功能实现:1.生成0-100的数字 2.猜数字。原创 2023-08-09 10:57:44 · 252 阅读 · 0 评论 -
C语言实现扫雷游戏(附完整代码)
扫雷游戏原创 2023-08-13 12:13:41 · 311 阅读 · 2 评论 -
BC117 小乐乐走台阶(附完整代码)
3.如果台阶级数大于2,设为n的话,这时我们把n级台阶的跳法看成n的函数,记为f(n),第一次跳的时候有两种选择:一是第一次跳一级,此时跳法的数目等于后面剩下n-1级台阶的跳法数目,即f(n-1),二是第一次跳两级,此时跳法的数目等于后面剩下n-2级台阶的跳法数目,即f(n-2),因此n级台阶的不同跳法数目的总数为f(n)=f(n-1)+f(n-2),不难看出就是斐波那契数列。小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?思路:(采用递归的思想)原创 2023-08-15 10:59:53 · 270 阅读 · 2 评论 -
冒泡排序(超详细!)(C语言)
冒泡排序原创 2023-08-12 09:48:01 · 171 阅读 · 0 评论 -
BC136 KiKi去重整数并排序
给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。第一行,输入一个整数n,表示序列有n个整数。第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。去重并且从小到大排列的整数序列,整数之间用空格分隔。对于这道题的,我提供了两种解法,一种容易想到,一种非常巧妙。原创 2023-08-14 09:03:11 · 575 阅读 · 0 评论 -
C语言使用库函数实现大小写字母转换
多行输入,输入大写字母,返回相应的小写字母;输入小写字母,返回相应的大写字母。tolower()-- 把大写字母转换为小写字母(输入小写字母的话不会变)toupper()-- 把小写字母转换为大写字母(输入大写字母的话不会变)islower() -- 判断是否为小写,是,返回非0,不是,返回0。isupper() -- 判断是否为大写,是,返回非0,不是,返回0。原创 2023-08-09 19:06:32 · 979 阅读 · 0 评论 -
编写一个函数实现n的k次方,使用递归实现
在这个问题中,我们要考虑k的取值正负。原创 2023-08-13 12:38:26 · 299 阅读 · 2 评论 -
统计二进制中1的个数的三种解法(C语言)
写一个函数返回参数二进制中 1 的个数。比如: 15 0000 1111 4 个 1。原创 2023-08-13 14:56:12 · 181 阅读 · 0 评论 -
BC119 小乐乐与字符串
大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子序列“CHN”的个数。子序列的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子序列。如“ABC”的子序列有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000)输出一个整数,为字符串s中子序列“CHN”的数量。输入:CCHNCHNCHNCHN。输入:CCHNCHN。原创 2023-08-15 12:57:51 · 300 阅读 · 2 评论 -
打印素数(C语言)
j++) ,j<=i这里,有必要循环这么多次吗,其实只要j<sqrt(i)就可以,因为如果i不是素数,i可以拆分成i=m*n(这里假设m<n),m必然小于sqrt(i),所以循环到sqrt(i)之前就可以找到m,就可以判断出i是不是素数;如果j循环到sqrt(i)都没有找到i%j==0,那就是素数喽~。就是只能被1和它本身整除的,比如11,只能被1和11整除,不能被2 3 4 5 6 7 8 9 10中的任一个整除,11就是素数。1.偶数必然不是素数,i可以从101开始自增2,即for(i=101;原创 2023-08-09 19:44:28 · 337 阅读 · 0 评论 -
编写一个函数,将参数字符串反向排列(C语言递归实现)
比如:char arr[ ]="abcdef";逆序之后数组的内容变成:fedcba。2.c和d之间有一个元素或者没有元素就停止。2.逆序中间的bcde。原创 2023-08-13 13:07:15 · 124 阅读 · 0 评论 -
打印整数二进制的奇数位和偶数位(C语言)
获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。原创 2023-08-13 15:26:12 · 64 阅读 · 0 评论