
编程题目
懒洋洋
这个作者很懒,什么都没留下…
展开
-
递归和非递归分别实现求n的阶乘
问题:递归和非递归分别实现求n的阶乘思路:使用递归之前,我们知道递推公式为n!=n*(n-1)*(n-2)…1递归实现代码:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int Func(int n) { if (n == 1) { ...原创 2019-03-29 12:27:51 · 545 阅读 · 0 评论 -
模拟实现strcpy
【问题描述】:模拟实现strcpy,完成将字符串str2拷贝到字符串atr1中。【问题要点】:1、源字符串必须以’\0’结束,拷贝完成后,也必须以’\0’为结束,在程序中使用语句dest[i] = ‘\0’;来完成。2、目标空间必须足够大,以确保能够存放源字符串。3、使用assert断言,排除掉指针为空的情况,增加代码健壮性。【实现代码】#include<stdio.h>...原创 2019-04-11 22:11:00 · 122 阅读 · 0 评论 -
模拟实现strcat
【问题描述】:模拟实现strcat,将字符串str2的内容拼接到字符串str1中。【问题要点】:1、源字符串必须以’\0’结束,拼接字符串完成后也必须以’\0’结束。2、目标空间即str1数组要足够大,以确保能够存放源字符串。3、目标空间必须可变。【实现代码】#include<stdio.h>#include<stdlib.h>#include<st...原创 2019-04-11 22:21:48 · 130 阅读 · 0 评论 -
模拟实现memcpy、memmove
【1、问题描述】模拟实现memcpy,函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。【问题重点】1、函数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置,这个函数在遇到’\0’的时候并不会停下来。2、在具体的函数实现过程中,思路很简单,类似于字符拷贝就可以完成,但有一个问题就是类型,me...原创 2019-04-15 16:31:14 · 180 阅读 · 0 评论 -
编写函数,实现函数返回值value的二进制位模式从左到右翻转后的值
问题:编写函数:unsigned int reverse_bit(unsigned int value);这个函数的返回值value的二进制位模式从左到右翻转后的值。如:在32位机器上25这个值包含下列各位:00000000000000000000000000011001翻转后:(2550136832)10011000000000000000000000000000程序结果返回:255...原创 2019-04-09 15:04:23 · 188 阅读 · 0 评论 -
不使用(a+b)/2这种方式,求两个数的平均值
问题: 不使用(a+b)/2这种方式,求两个数的平均值思路: 说到求平均值,也就是不使用除法运算,我们知道位运算右移一位相当于除2.实现代码:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int Average(int a, int b) { int c; c = a + ...原创 2019-04-09 15:19:51 · 592 阅读 · 0 评论 -
编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
问题: 编程实现:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)思路: 秘诀在于异或运算,例如:1,2,2三个数01^10 => 1111^10 => 01我们可以看出最终结果为没有重复的数字1.实现代码:#include<stdio.h>#include<stdlib.h>int main() ...原创 2019-04-09 15:33:41 · 177 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student".
问题:有一个字符数组的内容为:“student a am i”,请你将数组的内容改为"i am a student".要求:不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。思路: 可以使用数组或者指针的方法实现。先将整个字符串逆置过来,然后再将单个单词逆置,即可得到最终结果。数组的方法:#include<stdio.h>#include<st...原创 2019-04-09 16:03:33 · 191 阅读 · 0 评论 -
C语言实现简易通讯录
【问题描述】:用结构体相关内容来实现一个通讯录,通讯录中每个联系人信息包括:姓名、性别、年龄、电话、住址用一个结构体来完成描述的工作:typedef struct PersonInfo { char name[1024];//姓名 char sex[1024];//性别 char age[1024];//年龄 char phone[1024];//电话 char address[1...原创 2019-04-21 11:54:58 · 566 阅读 · 0 评论 -
将之前实现通讯录动态扩容版本
【问题描述】:前面我们完成了一个简易的通讯录,可以实现联系人的增删改查等基本功能,但在存储方面,只能支持静态的1000人的存储量,这样一来,如果联系人比较少,则会造成较大的内存浪费,联系人超过一千时,就不能完成存储了,所以接下来我们要做的一个操作就是将之前的通讯录改为一个支持动态扩容的版本。【问题思考】:1、说到动态扩容,我们可以想到,能够使用malloc来完成首次申请内存空间,第一次申请的...原创 2019-04-21 12:53:39 · 238 阅读 · 0 评论 -
模拟实现strstr、strchr、strcmp
【问题描述】:模拟实现strstr,在字符串str1的中查找是否包含字符串str2。【解题思路】:1、创建两个指针char* ptr1和char* ptr2分别指向str1和str2两个字符串的首位字符,再创建一个指针char* red_ptr1指向ptr1的位置。2、当red_ptr1指向元素等于ptr2指向元素时,这两个指针一同往后移,前提是这两个指针指向的位置都不是\0。3、如果...原创 2019-04-15 15:32:45 · 263 阅读 · 0 评论 -
【C语言】链表及单链表基本操作
1、什么是链表?链表的分类?链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。数据结构中:2、链表的分类共有8种链表结构...原创 2019-04-29 15:20:45 · 121271 阅读 · 7 评论 -
【Linux】在Linux下实现进度条程序
【问题】在Linux下实现一个进度条程序,通过makefile进行编译。首先,我们需要知道进度条是怎么实现的?进度条的动态效果是利用人眼的视觉暂留做到的。比如说:先输出: “= ”表示1%在下一次则显示:“== ...原创 2019-05-21 17:01:35 · 488 阅读 · 0 评论 -
使用递归和非递归分别实现strlen
问题:递归和非递归分别实现strlen。思路:递归计算时设置str[0] == '\0’的结束条件,只要不满足这一条件,就继续调用自身函数实现代码:#include<stdio.h>#include<stdlib.h>int Strlen(char str[]) { if (str[0] == '\0') { r...原创 2019-03-29 12:17:29 · 197 阅读 · 0 评论 -
编写一个函数 reverse_string(char * string),递归实现:将参数字符串中的字符反向排列
问题:编写一个函数 reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。思路:因为不能使用C函数库中的字符串操作函数,因此在递归函数的调用时,先定义一个指针型char字符串,函数内部先调用自己,直到找到一个字符为’\0’时开始往外打印,最终实现字符串从最后一个开始输出。实现代码:#inclu...原创 2019-03-29 11:51:24 · 1143 阅读 · 0 评论 -
排查凶手问题
问题:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个 嫌疑犯的一个。以下为4个嫌疑犯的供词。A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。思路:由题目可知每位嫌疑犯都有是凶手或不是凶手两种可能,用0表示不是凶手,1表示是,那么四名嫌疑犯的说法可以翻译为:A=0,C=1,D=1...原创 2019-04-04 14:12:16 · 214 阅读 · 0 评论 -
打印杨辉三角
杨辉三角:11 11 2 11 3 3 1…思路: 可以看出在杨辉三角中,每行元素的第一个和最后一个都是1,从第三行开始,第二个到倒数第二个元素等于上一行相邻两元素之和。那我们可以分开进行处理,最后打印。功能: 打印杨辉三角,由用户指定行数来进行打印。要注意的是,我这里是使用宏来设置行数的,因此用户输入的行数不能大于N 15.#define _CRT_SECURE_NO_WARN...原创 2019-04-04 14:32:45 · 167 阅读 · 0 评论 -
用C语言实现调整数组使奇数全部都位于偶数前面
问题:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路: 拿两个指针,分别指向数组首位与末位,当首位找到偶数,并且末位找到奇数时,互换两个指针指向的元素,并且对两个指针进行往后或往前移位,在前面指针指向元素下标小于后位指针的范围内,依次进行查找与调换,即可达到题目要求。实现代码:#include<stdi...原创 2019-04-10 11:19:06 · 1183 阅读 · 0 评论 -
在一个满足杨氏矩阵的数组中查找一个数字是否存在
题目:有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。要求时间复杂度小于O(N);数组为:1 3 42 4 54 5 6思路:1、二分搜索法:说到数组每行或每列都是递增的,我们会想到采用二分查找的办法,但是若矩阵很大,一行需要使用一次二分查找,n行就需要查找n次了,这样的查找效率很低,也不满足题目时间复杂度小于O(N)的要...原创 2019-04-10 12:00:01 · 209 阅读 · 0 评论 -
C语言实现简易五子棋
用C语言写一个简单的五子棋游戏,可以实现玩家与电脑的对弈,玩家先落子,然后电脑落子,直到有一方五个棋子连成一线则取得胜利。1、首先我们先写一个菜单,在玩家一进入游戏时做一个提醒,玩家输入1时进入游戏,输入0时退出游戏,输入其它则提示输入有误。int Menu() { printf("***********************\n"); printf(" 五子棋游戏 ...原创 2019-04-05 18:16:41 · 10693 阅读 · 3 评论 -
用C语言创建一个数组,实现初始化、清空数组、数组元素逆置
问题:创建一个数组,实现函数init()初始化数组、实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。要求:自己设计函数的参数,返回值。(1)函数init()将数组各元素初始化为0,1,2,3…(2)函数enpty()将数组各元素清空为0.(3)函数reverse()将数组元素逆置,即逆序输出。思路:给定数组元素为10 的一个数组,需要完成arr[0]和arr...原创 2019-03-29 09:49:58 · 1786 阅读 · 0 评论 -
用C语言实现一个函数,可以左旋字符串中的k个字符
题目:实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB思路:ABCD左旋一个字节,先把最左侧的A拿出来存到一个中间变量中,然后其余的后一个字节放到前一个字节的位置,再把中间变量中存的值给最后一个字节,即完成一次左旋。需要左旋两次时就再完成一次左旋。实现代码:#define _CRT_SECURE_NO_WARNINGS#in...原创 2019-04-11 19:04:59 · 291 阅读 · 0 评论 -
C语言实现判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
问题:判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABC思路:首先可以看出:例AABCD左旋一个字符得到:ABCDA左旋四个字符得到:DAABC左旋五个字符得到:A...原创 2019-04-11 19:29:00 · 314 阅读 · 0 评论 -
用递归和非递归分别实现斐波那契数列
斐波那契数列介绍:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=...原创 2019-03-29 10:39:07 · 13935 阅读 · 0 评论 -
使用递归,编写一个函数实现n^k
思路:先写出n^k在数学上是如何实现的,我们知道它就是k个n相乘,实现代码:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>int Func(int n, int k) { if (k > 0) { return (n*Fu...原创 2019-03-29 11:02:26 · 433 阅读 · 0 评论 -
C语言编程实现一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字。
题目:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 找出这两个数字,编程实现。思路:在前面我们遇到过在一个数组中只有一个数字出现一次,找出这个数字是用的异或来完成的,现在要找其中两个只出现一次的数字,方法还是一样,只是异或得到的结果是那两个数字异或后的值,应该怎么处理拿出来这两个数字呢。1、将数组中所有的数字异或,得到两个只出现一次的两个数字异或的结果。2、将得到的这个数...原创 2019-04-11 21:28:52 · 541 阅读 · 1 评论 -
喝汽水问题,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水。
【问题描述】喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。【解题思路】1、一元买一瓶汽水,20元可得20瓶。2、20瓶可换/2得10瓶汽水。10个空瓶又可以换得5瓶汽水,5个空瓶又可以换得2瓶汽水,并且余一个空瓶,可以在下次换时用到,因此,不可忘记了加上%2的结果。【实现代码】#define _CRT_SECURE_NO_WARNINGS#inc...原创 2019-04-11 21:57:52 · 2359 阅读 · 1 评论 -
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和以及递归打印一个整数的每一位
问题:1、写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是192、递归方式实现打印一个整数的每一位思路:这两个问题的相似处在于都需要将一个整数的各位求出来,我们知道取整数的各位要用/10、%10的方法。1、要返回整数的每一位相加的结果,可以先%10取出个位+((n/10)进入函数继续%...原创 2019-03-29 11:30:40 · 862 阅读 · 0 评论 -
【C++】mkdir
题目描述:工作中,每当要部署一台新机器的时候,就意味着有一堆目录需要创建。例如要创建目录“/usr/local/bin”,就需要此次创建“/usr”、“/usr/local”以及“/usr/local/bin”。好在,Linux下mkdir提供了强大的“-p”选项,只要一条命令“mkdir -p /usr/local/bin”就能自动创建需要的上级目录。现在给你一些需要创建的文件夹目录,请...原创 2019-08-13 11:33:16 · 6087 阅读 · 0 评论