C语言小练习
melody_jae
这个作者很懒,什么都没留下…
展开
-
在一组数字中找出最大和第二大的两个数
题目:在一组数字中找出最大和第二大的两个数要求:只能遍历一次数组思路:定义两个变量max和second,#include<stdio.h>#include<stdlib.h>void Find_Two_MaxNum(int a[], int size, int*max,int *second){ for (int i = 0; i < size...原创 2018-11-28 16:50:59 · 4051 阅读 · 0 评论 -
判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
题目: 判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA AABCD右旋一个字符得到DAABC 思路:把源字符串追加到源字符串后边,这样问题就转化成了查找字串。可以利用strstr函数来完成,但...原创 2018-11-07 00:13:38 · 372 阅读 · 0 评论 -
//杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在
题目://杨氏矩阵 有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。 时间复杂度小于O(N); 数组: 1 2 3 2 3 4 3 4 5 1 3 4 2 4 5 4 5 6分析:拿到这个题一开始的思路就是暴力解法,直接两个嵌套的for循环遍历二维数组,但是这样的时间复杂度就是O^2(n),题目要求的时间复杂度...原创 2018-11-03 20:04:23 · 432 阅读 · 0 评论 -
.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。
题目:编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 10011000000000000000000000000000 ...原创 2018-11-02 20:43:32 · 331 阅读 · 0 评论 -
调整数组使奇数全部都位于偶数前面
题目:输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分分析:分别定义左右两个指针,一个从前向后找偶数,找到第一个偶数就停下来;同理,另一个从后向前找奇数,找到第一个奇数就停下来,然后把两个数据进行交换。依次循环,直到两个指针相遇。本题要注意的几个关键点:本题的大循环条件肯定是left<right,但是依...原创 2018-11-03 17:39:45 · 542 阅读 · 0 评论 -
.编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算)
题目:编程实现: 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。(使用位运算) 代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>//思路:将所有数字全部异或,最后得到的值即为只出现一次的数字int Find_one_num...原创 2018-11-03 10:36:46 · 222 阅读 · 0 评论 -
不使用(a+b)/2这种方式,求两个数的平均值
题目:不使用(a+b)/2这种方式,求两个数的平均值分析:采用位运算的方法(图解如下)代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int Average(int num1, int num2){ return num1 + ((num2 - num1...原创 2018-11-03 10:22:56 · 133 阅读 · 0 评论 -
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
题目:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。 分析:比赛的名次有第1名、第2名、第3名、第4名、第5名,对应着5个人。每一个都可能是这5个名次中的一种。所以排列组合就是...原创 2018-10-30 11:48:29 · 425 阅读 · 0 评论 -
在屏幕上打印杨辉三角
题目:.在屏幕上打印杨辉三角。 1 1 1 1 2 1 1 3 3 1分析:首先找出杨辉三角的规律:每行的第一个数都为1,紧接着下一项的值都为上一行两个值相加。那么就涉及到一个点:如何保存“上一行的两个值”?,这里我们可以设置一个二维数组进行保存。还有一个点:每行的最后一个值是1,但是上一行对应“相加数”只有一个值,那这个1如何得到?可以把二维数组全部初始化为0,这样,每一个二维数组的...原创 2018-10-30 11:06:21 · 1143 阅读 · 1 评论 -
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个 嫌疑犯的一个。现在请根据这些信息,写一个程序来确定到底谁是凶手。
题目:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个 嫌疑犯的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这些信息,写一个程序来确定到底谁是凶手。 分析:这个题要与“确定比赛名次”(使用枚举法)那道题区分开来。使用枚举法用于-->有多个可能的结果,所以用多重fo...原创 2018-10-30 11:17:05 · 1067 阅读 · 3 评论 -
创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置
题目:创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置。 要求:自己设计函数的参数,返回值。 分析:题目不难,但是这里一定要注意memset函数的使用,是按照一个字节一个字节进行填充的,不是类型,具体参见https://blog.csdn.net/melody_1016/article/details/83...原创 2018-10-29 10:31:51 · 634 阅读 · 0 评论 -
编写一个函数实现n^k,使用递归实现
题目:编写一个函数实现n^k,使用递归实现 代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int Kpowerofn(int n, int k)//默认n>0,k>=0,这里没有考虑n<0的情况{ if (k == 1) { retur...原创 2018-10-17 20:52:39 · 184 阅读 · 0 评论 -
三字棋
三子棋是五子棋的简化版,原理和五子棋一样#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#define ROW 3#define COL 3//1.定义棋盘:二维数组//2.初始化棋盘//3.先打印一下棋盘//4.用户下一步棋,顺便检查一下游戏是否结束//5.电...原创 2018-11-02 09:56:17 · 553 阅读 · 0 评论 -
扫雷
代码:#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>//扫雷游戏的实现#define ROW 9#define COL 9#define Mine_Count 30//定...原创 2018-11-02 10:04:09 · 203 阅读 · 0 评论 -
模拟实现strcpy
代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>char*Strcpy(char*dest, const char*src){ assert(src); assert(dest); char*start = de...原创 2018-11-09 00:08:39 · 126 阅读 · 0 评论 -
模拟实现strcat函数
代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>char*Strcat(char*dest, const char*src){ assert(dest); ...原创 2018-11-08 23:54:15 · 130 阅读 · 0 评论 -
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以喝多少汽水
题目:喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以喝多少汽水代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int money = 0; scanf("%d", &money); int empty = m...原创 2018-11-08 23:52:50 · 326 阅读 · 0 评论 -
一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现
题目:一个数组中只有两个数字是出现一次, 其他所有数字都出现了两次。 找出这两个数字,编程实现思路一:暴力求解。每次选取一个元素,再遍历数组,判断是否有与其相同的元素,如果有则跳出循环;每一轮遍历都结束后都可以根据j与size的大小判断出只出现一次的数字代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#incl...原创 2018-11-08 23:43:51 · 565 阅读 · 0 评论 -
.实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB
题目:实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 思路一:“数组挪动”,比如ABCD左旋一个字符,我们可以先把首元素保存起来,然后其他元素依次向左挪一个位置,这样最后一个字符(这里不谈\0,指的是D)的位置就空出来了,再把之前保存的那个字符放到这个位置,就成了BCDA。左旋2个字符同理,只不过多一层循环。这种方法时间复...原创 2018-11-05 16:15:28 · 267 阅读 · 0 评论 -
模拟实现memcpy函数
代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>void*Memcpy(void*dest, const void*src, size_t count){ assert(dest); assert(sr...原创 2018-11-11 00:31:31 · 186 阅读 · 0 评论 -
模拟实现strchr函数
代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>char*Strchr(const char*str, int ch){ assert(str); char*pst...原创 2018-11-11 00:26:11 · 152 阅读 · 0 评论 -
模拟实现memmove函数
代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>void*Memmove(void*dest, const void*src, int num){ assert(dest); assert(src); char*...原创 2018-11-10 23:19:46 · 114 阅读 · 0 评论 -
动态顺序表
SeqList.h#pragma oncetypedef int DataType;typedef struct SeqList{ DataType*_pData; int _capacity;//容量 int _size;//有效元素的个数}SeqList;void SeqListInit(SeqList*pSeq,int capacity);//初始化顺序表void...原创 2018-11-10 19:37:06 · 220 阅读 · 0 评论 -
有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student".
题目:有一个字符数组的内容为:"student a am i", 请你将数组的内容改为"i am a student". 要求: 不能使用库函数。 只能开辟有限个空间(空间个数和字符串的长度无关)。 student a am i i ma a tneduts i am a student 思路:再定义一个数组,把原数组的字符串倒着拷入目标数组(相当于源字符串逆过来),然后操作目...原创 2018-11-02 23:37:12 · 287 阅读 · 0 评论 -
递归和非递归分别实现求第n个斐波那契数
题目:递归和非递归分别实现求第n个斐波那契数代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>//递归实现求第n个斐波那契数int Fib(int n){ if (n == 1 || n == 2) { return 1; } return Fib(n...原创 2018-10-17 19:59:44 · 217 阅读 · 0 评论 -
递归和非递归分别实现求n的阶乘
题目:递归和非递归分别实现求n的阶乘 代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>//非递归实现n的阶乘int Factor(int n){ int ret = 1;//处理0的阶乘和1的阶乘 for (int i = 1; i <= n; i+...原创 2018-10-17 19:20:38 · 1714 阅读 · 0 评论 -
猜数字游戏
题目:写一个简单的猜数字游戏代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<time.h>//猜数字游戏void Menu(){ printf("欢迎小可爱来到我们的“幸运猜猜猜”游戏环节\n"); printf("*****...原创 2018-10-12 16:30:52 · 941 阅读 · 0 评论 -
求出0~999之间的所有“水仙花数”并输出
题目:求出0~999之间的所有“水仙花数”并输出“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153 = 1^3 + 5^3 + 3^3,则153是一个“水仙花数”。 /* 在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。 例如1...原创 2018-10-05 23:06:56 · 797 阅读 · 0 评论 -
编写程序数一下 1到 100 的所有整数中出现多少次数字9
题目:编写程序数一下 1到 100 的所有整数中出现多少次数字9分析:1-100之间的数字,9要么出现在个位要么出现在十位,所以问题就演变成如何取出数字的每一位?判断是否是9.这里我们不难想到之前学过的知识:整数的分解。采用%10再/10的办法。代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#includ...原创 2018-09-27 11:48:31 · 1572 阅读 · 0 评论 -
判断1000年---2000年之间的闰年
本题思路只用按照闰年的定义就行,没有难度,就是一个闰年的条件判断语句代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int year = 0; //int count = 0;//统计闰年的个数 int i = 0; ...原创 2018-09-21 23:28:43 · 1652 阅读 · 0 评论 -
输出乘法口诀表
如题,打印一个九九乘法口诀表代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int main(){ int line = 1;//行 int col = 1;//列 int ret = 0;//结果 for (line = 1; line <= 9;...原创 2018-09-21 20:21:03 · 436 阅读 · 0 评论 -
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
题目:计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值分析:本题属于“交错列相加求和”问题,关键点就是符号位正负的变化。具体可以参见之前写过的一篇博客https://blog.csdn.net/melody_1016/article/details/82320590代码:#define _CRT_SECURE_NO_WARNINGS 1#incl...原创 2018-09-27 10:45:34 · 863 阅读 · 0 评论 -
将数组A中的内容和数组B中的内容进行交换。(数组一样大)
题目:将数组A中的内容和数组B中的内容进行交换。(数组一样大) 分析:此题与之前做过的“交换两个变量的值”思路相同。但是这里要注意,不管使用哪种方法(创建临时变量还是不创建),如果交换数值写成函数的形式,一定要传地址。代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>...原创 2018-09-27 00:26:05 · 712 阅读 · 0 评论 -
打印100~200 之间的素数
既然是“打印100~200 之间的素数 ”,必然涉及两点:(1)100-200之间的所有数字有哪些(2)对于给出的一个数字,如何判断是素数所以此题我们把它拆解成以上两部分考虑,这也是为之后代码优化提供思路的切入点方法一:最常规对于第(1)点:依次遍历100-200之间的数字对于第(2)点:按照“素数定义”判断,依次检验除了1和它本身的所有数字,看能否被整除,如果能,则说明不...原创 2018-09-21 19:32:35 · 387 阅读 · 0 评论 -
求两个数的最大公约数
题目:求两个数的最大公约数分析:解决本题的基本方法有两种:(1)试探法(也叫枚举法):即所有的数字一一试验,看是否符合同时能整除两个数的条件,找出最大。(2)辗转相除法:具体参见之前的博客https://blog.csdn.net/melody_1016/article/details/82527391代码:#define _CRT_SECURE_NO_WARNINGS 1...原创 2018-09-25 16:46:50 · 136 阅读 · 0 评论 -
将三个数按从大到小输出
题目:将三个数按从大到小输出分析:本题其实也是“排序”部分的知识,但是由于只是3个数比较大小,所以我们可以不用排序的方法解决。(排序方法解决此题可以参见之前写过的一篇博客https://blog.csdn.net/melody_1016/article/details/82757950)思路:两两比较大小,然后交换(交换时用到一个临时保存数值的变量t),a,b,c分别保存最大,中等,最小数...原创 2018-09-25 16:36:05 · 9130 阅读 · 0 评论 -
求10 个整数中最大值
题目:求10 个整数中最大值分析:可以默认第一个数为最大,用max保存最大数字,然后每输入一个数字,就与max进行比较,不断更新max的值。最后max中保存的值就是最大数字。这里10个整数可以不用数组保存,逐一输入比较;也可以用数组保存,然后遍历比较。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<...原创 2018-09-25 15:59:17 · 673 阅读 · 0 评论 -
写代码可以在整型有序数组中查找想要的数字
题目:写代码可以在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回-1.(折半查找) 代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int BinarySearch(int a[], int key,int len){ int ret = -1;//...原创 2018-10-12 16:59:51 · 231 阅读 · 0 评论 -
编写代码模拟三次密码输入的场景
题目:编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输入,最多输入三次。三次均错,则提示退出程序。 分析:题目相对简单,看完后,你可能马上会写下如下代码-->#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>...原创 2018-10-13 00:22:07 · 423 阅读 · 0 评论 -
模拟实现strlen函数
题目:模拟实现strlen函数非递归方式:主要是借助计数器的方式,利用指针移动一个一个数字符个数,直到遇到末尾的\0截止 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<assert.h>//非递归实现strlenint Strl...原创 2018-10-17 18:45:11 · 106 阅读 · 0 评论