![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言算法总结
U201017971
这个作者很懒,什么都没留下…
展开
-
最大公约数-——Gcd算法
求最大公约数的对数时间复杂度的算法。int Gcd(int M,int N ){ int Rem;while(N>0){Rem = M%N;M=N;N=Rem;}return M;}原创 2011-12-07 21:53:15 · 643 阅读 · 0 评论 -
位运算:循环移位。
需求:要求将a向右n位,最右端的n位则移到最左边的n位。分析:移位操作,考虑使用位运算来实现。可以先保留低n位,对a进行右移操作,之后把高n位与低32-n位或运算即可。实现: void main(int argc,char *argv[]){ int a,b,n;scanf("%d %d",&a,&n);printf("a=%0x\n",a);b=a<<(32-n)原创 2016-01-26 09:28:02 · 1137 阅读 · 0 评论 -
位段详解。
C语言想结构体中以位为单位来指定其成员所占内存的长度。如:struct data{unsigned a:2;unsigned b:4;unsigned c:16;int i;};如果各个位段之和没有沾满一个字节,则存储单元其余位置为空。对位段数据的引用方法:data.a=2;如果data.a=4;则报错。1.位段成员的类型必须为uns原创 2016-01-26 09:43:18 · 1500 阅读 · 0 评论 -
C语言中的文件
C版本中使用的有两种对文件处理的方法:缓冲文件系统:指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区,从内存想磁盘输入数据,必须先送到内存中,缓冲区装满后才一起送到磁盘。以下介绍均为缓冲区文件系统。非缓冲区文件系统:系统不自动开辟确定大小的缓冲区,由程序为每个文件设定缓冲区。UNIX系统下,用缓冲区文件系统处理文本文件,用非缓冲区文件系统处理二进制文件。原创 2016-01-26 10:54:17 · 511 阅读 · 0 评论 -
文件打开方式的标识以及说明
打开方式: "r"(只读) 为输入打开一个文本文件 "w"(只写) 为输出打开一个文本文件 "a"(追加) 向文件文件尾添加数据 "rb"(只读) 为输入打开一个二进制文件 "wb"(只写) 为输出打开一个二进制文件 "r+"(读写) 为读写打开一个文本文件 "w+"(读写) 为读写建立一个新的文本文件 "a+"(读写原创 2016-01-28 16:30:07 · 991 阅读 · 0 评论 -
C语言数据类型,运算符与表达式
数据类型:基本类型:整型,字符型,浮点型(单精度,双精度),枚举型。构造类型:数组,结构体,共用体。指针空类型。常量和变量:常量有字符常量和数字常量,还有符号常量。不可被赋值。变量名,只能由字母,数字下划线组成。且首字母不能使数字。整型数据:十进制数,八进制数(以0开头),十六进制(以0x开头)。2^16=65536.不同类型的整型数据可以进原创 2016-03-17 11:06:29 · 1194 阅读 · 0 评论 -
青蛙变态跳台阶
题目要求:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?class Solution {public: int jumpFloorII(int number) { if(number==1) return 1; else return 2*jumpFloorII(number-1)原创 2016-05-06 15:37:02 · 450 阅读 · 0 评论 -
剑指offer矩形覆盖问题
题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?观察题目中的矩形,2*n的,是个长条形。本来脑中想象的是复杂的华容道,但是既然只是简单的长条形,那么依然逆向分析。既然是长条形的,那么从后向前,最后一个矩形2*2的,只有两种情况: 第一种是最后是由一个2*(n-1)的矩形加上一个竖着的2*1原创 2016-05-06 15:49:00 · 486 阅读 · 0 评论 -
腾讯17年实习生编程试题--构造回文
题目描述:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子:abcdagoogle转载 2016-05-30 16:38:26 · 3670 阅读 · 0 评论 -
可视化数据结构和算法,用图示来表示
http://visualgo.net/原创 2016-07-10 10:25:16 · 444 阅读 · 0 评论 -
剑指offer---面试题6重建二叉树
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。重建出二叉树,并输出根节点。二叉树的定义如下:struct BinaryTreeNode{int m_nValue;struct BinaryTreeNode * m_pLeft;struct BinaryTreeNode * m_pRigth;};原创 2016-06-13 15:22:58 · 471 阅读 · 0 评论 -
剑指offer---面试题7 用两个栈实现队列
题目描述:用两个栈实现队列。队列的声明如下,请实现两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能。template class CQueue{public:CQueue(void);~CQueue(void);void appendTail(const T&node);T deleteHead();原创 2016-06-15 15:24:46 · 385 阅读 · 0 评论 -
剑指offer--面试题10-整数的二进制中有多少个1
//normal solutionint numberOf1(int n){ int count=0; int flag=1; while(flag) { if(n&flag) count++; flag<<=1; }}//great solution//把一个整数减一,再和原来的整数与,会把最右边一个1变成0.那么一个整数的二进制有多少个1,//就会做多少次这样的原创 2016-06-15 22:17:19 · 631 阅读 · 0 评论 -
剑指offer--快速排序递归实现,年龄排序O(N)实现,旋转数组最小值查找
快速排序算法的递归实现:void swap(int *a,int *b){ int c; c=*a; *a=*b; *b=c;}int Partition(int data[],int length,int start,int end){ int i; i= RandomInRange(start,end); swap(&data[原创 2016-06-15 21:30:11 · 526 阅读 · 0 评论 -
剑指offer--打印1到最大的N位数字
题目:输入数字N,按顺序打印出从1到最大的N位十进制数字。首先需要考虑两点,一是要考虑大数问题,遇到会溢出的数字仍能满足条件。二是要满足,按照常规习惯,数字前面的0不输出。实现:#include "stdafx.h"#include //用来判断是否达到最大的N位数99^9,当达到的时候会产生最高位进位为1.该种情况返回truebool Incremen原创 2016-06-20 13:42:52 · 355 阅读 · 0 评论 -
13 在O1的时间删除链表节点-使用一个节点指针
题目描述:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)的时间删除该节点。链表节点与函数的定义如下:struct ListNode{int m_nValue;ListNode *m_pNext;};void deleteNode(ListNode *pListHead,ListNode *pDelete);分析: 使用一个节点指针,删除某一个指定节点,在原创 2016-06-20 14:31:35 · 660 阅读 · 0 评论 -
链表的创建,输出,删除,插入操作。VS2012环境下可执行
需求:定义学生结构体,包含学号和得分两个属性。包含建立学生链表,输出链表,删除指定学号的学生,插入某个学生,这些操作。定义结构体:struct student{long num;float score;struct student *next;};定义函数:createstu,del,insertstu,printstu。具体实现:#in原创 2016-01-25 09:56:56 · 1133 阅读 · 0 评论 -
main函数传参数以及执行过程
需求:通过main函数传递参数,输入若干个字符串,并进行打印输出。分析:main函数包括两个参数,main函数的原型为:void main(int argc,char *argv[]);argc代表了参数的个数,argv代表了每个字符串的首地址。我们可以进行如下程序的编写: void main(int argc,char *argv[]){ whi原创 2016-01-19 16:52:04 · 1807 阅读 · 0 评论 -
最大子序列和的线性时间算法
傻瓜算法应该算是O(n*n*n)的时间复杂度算法了。从(i~j)的全部组合之和。如下:MaxSubsequenceSum(const int A[],int N){ int thisMax,MaxSum,i,j,k; MaxSum = 0; for(i = 0;i for(j=1;j { thisSum = 0;原创 2011-12-27 20:47:56 · 689 阅读 · 0 评论 -
Strassen‘s 矩阵乘法
strassen's矩阵相乘对于矩阵乘法 C = A × B,通常的做法是将矩阵进行分块相乘,如下图所示:从上图可以看出这种分块相乘总共用了8次乘法,当然对于子矩阵相乘(如A0×B0),还可以继续递归使用分块相乘。对于中小矩阵来说,很适合使用这种分块乘法,但是对于大矩阵来说,递归的次数较多,如果能减少每次分块乘法的次数,那么性能将可以得到很好的提高。Strassen矩阵乘法就是采用原创 2012-06-14 10:25:32 · 5537 阅读 · 0 评论 -
VC++MFC ADO数据库编程实现与总结
1.首先在stdafx.h 文件中导入如下:#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF") 2.在工程的APP文件中的InitInstance()中添加如下函数: AfxOleInit(); 3.添加数据库连接:你可以将下原创 2012-07-05 21:29:24 · 1757 阅读 · 0 评论 -
MFC窗口关闭后怎么恢复?
查了半天,好不容易出来了。 先打开对话框资源。在工具条的任意位置点击鼠标右键,出现一个菜单,选择其中的controls原创 2012-06-26 20:09:34 · 1789 阅读 · 0 评论 -
全点对最短路径
实验条件:实验内容及要求:实验源码:// allpointpath.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include#includeint g[5][5]={{0,3,8,100,-4}, {100,0,100,1,7},原创 2012-06-16 23:56:09 · 1822 阅读 · 0 评论 -
vc++ 里面的趣事
先看下面几行代码:一:int main(int argc, char* argv[]){ int i = -1; unsigned int j = 1; if(i>j) printf("huche"); getchar(); return 0;}输出结果为:huche 二:原创 2012-06-28 18:10:21 · 1164 阅读 · 7 评论 -
VC++ ODBC编程
http://blog.csdn.net/andylin02/article/details/1605386 http://blog.csdn.net/smallbasket/article/details/4895551 http://wenku.baidu.com/view/ad473dda50e2524de5187e5f.html原创 2012-06-30 11:56:12 · 840 阅读 · 0 评论 -
vc++控件的应用
vc++控件的应用汇总:http://www.cppblog.com/coloerful/archive/2009/06/02/86603.aspx转载 2012-07-01 16:28:39 · 605 阅读 · 0 评论 -
VC++ADO一小时入门到精通
详细介绍ADO数据库编程,手把手教你学。http://blog.csdn.net/wilsonwong/article/details/1329469转载 2012-07-02 22:39:41 · 785 阅读 · 0 评论 -
魔方阵的实现 C语言
要求输出1~n²的自然数构成的魔方阵。STEP 1 什么是魔方阵? 魔方阵,古代又称“纵横图”,是指组成元素为自然数1、2…n2的平方的n×n的方阵,其中每个元素值都不相等,且每行、每列以及主、副对角线上各n个元素之和都相等。如:8 1 63 5 74 9 2 奇阶魔方阵的排列方法: ⑴将1放在第一行中间原创 2016-01-15 16:30:29 · 9663 阅读 · 1 评论 -
杨辉三角 C语言
杨辉三角的定义:11 11 2 11 3 3 11 4 6 4 1……输出以上的数据。分析:除了对角线上的元素和第一列元素,其他的元素均为前一行的前一列和前一行的该列元素之和。实现:void yanghui(int n) //output n line{ int a[20][20]={1,原创 2016-01-15 16:34:43 · 1028 阅读 · 0 评论 -
hanoi(汉诺)塔问题递归过程
老和尚借助B柱子,把A上的盘子移动到C柱子上,盘子必须是大的在下面。void move(char a,char b){ printf("%c-->%c\t",a,b);}void hanoi(int n, char a,char b,char c){ if(n==1) { move(a,c); } else { hanoi(n-1,a,c,b); move(原创 2016-01-18 15:13:01 · 575 阅读 · 0 评论 -
VS2012 scanf()运行通不过的时候,提示需要使用scanf_s()的解决办法。
在文件开头加入如下一行即可,使用原始版本的函数:#pragma warning(disable:4996)。另外,或者你直接按照现在版本的函数原型,需要添加一个参数,用来指定缓存区的大小。vs现在的版本的函数大多都要指定缓存区的大小,所以为了方便起见可以直接添加一句预编译的命令。原创 2016-01-18 19:53:45 · 2285 阅读 · 0 评论 -
最大公约数和最小公倍数
需求:输入两个正整数,求两个数的最大公约数和最小公倍数。分析:首先可以使用辗转相除法求出两个数的最大公约数,之后再把两个数相乘除以最大公约数即为最小公倍数。实现源码:int gcd(int a,int b){ int s; if(a<b) { s=a; a=b; b=s; } while((s=a%b)!=0) a=b,b=s原创 2016-01-18 20:31:14 · 464 阅读 · 0 评论 -
C语言函数指针的使用举例
需求:设计一个函数process,调用它的时候,每次实现不同的功能,分别求两个数的和,两个数的差,还有两个数较大值。分析:可以在process函数中,使用函数指针作为参数,传递不同函数的入口地址,得出不同的结果。函数指针的定义为:int (*p)(int,int)使用为:(*p)(a,b);源码例子:int add(int a,int b){ return原创 2016-01-19 14:40:45 · 1963 阅读 · 0 评论 -
删除链表中倒数第K个节点,
题目:输入一个链表,输出该链表的倒数第K个节点。为了符合大多数的习惯,最后一个节点从1开始计数,即链表的尾部节点为倒数第一个节点。链表定义如下:struct ListNode{ int m_nValue;ListNode *m_pNext;};#include "stdafx.h"struct ListNode{ int m_nValue; ListNode *m_原创 2016-06-20 19:57:40 · 789 阅读 · 0 评论