
c语言
文章平均质量分 65
Stephan14
这个作者很懒,什么都没留下…
展开
-
字符串匹配
前几天看书,书中有一道联系题:编写一个函数,在该函数中的第一个参数中进行查找,并返回匹配第二个参数所包含的字符的数量。然后,第一种想法就是使用做笨的方法,从第一个参数的字符串从第一个字符开始到最后一个字符逐一进行匹配,为了写起来更简便一点,我借用了一些C语言的库函数,最终代码如下:#include#includeint count_chars( char const *str, char原创 2016-03-07 17:08:40 · 713 阅读 · 0 评论 -
选择问题算法
对于给定的n 个元素的数组A(1 : n ),要求从中找出第k小的元素。如果划分元素v测定在A(j)的位置上,则有j-1个元素小于或等于A(j),且有n-j个元素大于或等于A(j)。因此,若k,则第k小元素在A(1:j-1)中;若k=j,则A(j)就是第k小元素;若k>j,则第k小元素是A(j+1:n)中第(k-j)小元素。所导出的算法如果成SELECT。此过程把第k小元素放在A(k),并划分原创 2015-04-01 01:03:53 · 1441 阅读 · 0 评论 -
基于哈夫曼(haffuman)算法的文件压缩的实现(C语言
基于哈夫曼(haffuman)算法的文件压缩的实现(C语言)(转) 本文首先简要阐述哈夫曼算法的基本思想,然后介绍了使用哈夫曼算法进行文件压缩和解压缩的处理步骤,最后给出了C语言实现的文件压缩和解压缩的源代码。 哈夫曼算法的主要思想是: ①首先遍历要处理的字符串,得到每个字符的出现的次数;转载 2015-04-02 18:41:44 · 2970 阅读 · 0 评论 -
算法训练 区间k大数查询
问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n,表示序列长度。第二行包含n个正整数,表示给定的序列。第三个包含一个正整数m,表示询问个数。接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。输出格式原创 2015-03-18 20:10:40 · 527 阅读 · 0 评论 -
C语言的位操作
一、基本位| 或& 与~ 取反^ 异或左移>> 右移二、位操作的常见用法1.获取某位的值#define BitGet(Number,pos) ((Number)|= 1(pos)转载 2015-04-02 21:35:58 · 610 阅读 · 0 评论 -
算法训练 Anagrams问题
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。 输入格式:输入有两行,分原创 2015-04-03 14:34:03 · 974 阅读 · 0 评论 -
最长公共子序列求解:递归与动态规划方法
最长公共子序列求解:递归与动态规划方法 在做OJ题目的时候,经常会用到字符串的处理。例如,比较二个字符串相似度。这篇文章介绍一下求两个字符串的最长公共子序列。 一个字符串的子序列,是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺序的情况下组成的新字符串。 最长公共子序列,是指多个字符串可具有的长度最大的公共的子序列。 (1)递归方法求最长公共子序列的长度转载 2015-04-06 21:26:51 · 817 阅读 · 0 评论 -
如何在topcoder上进行算法比赛
原文地址:如何在topcoder上进行算法比赛作者:【如来】topcoder的竞赛页面地址:http://www.topcoder.com/tc topcoder竞赛有算法,软件设计,软件开发,高中生算法竞赛,马拉松赛之分。每次比赛根据最终成绩可赚取rating。成绩优者可赚取一定数量的dollar。 首先需要在topcoder下注册个帐号。填够资料,然后选择你想参加的转载 2015-04-12 11:09:58 · 9057 阅读 · 2 评论 -
二叉树的文本模式输出
转自:http://youthlin.com/2014868.html上周一数据结构上机,题目是”二叉树相关算法的实验验证”,其中要求 为便于观察程序的运行结果,设计的输出函数能在输出设备上以图形或表格或其它直观的形式输出计算结果。好吧,比较友好的让他显示树状就行了,可是想了很久就是不知道怎么办。。。上网搜索了一下”输出二叉树“,真正找到两篇有用的文章,一篇是优快云 copica转载 2015-04-24 23:02:29 · 2347 阅读 · 1 评论 -
基础练习 完美的代价
基础练习 完美的代价 时间限制:1.0s 内存限制:512.0MB问题描述 回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。 交换的定义是:交换两个相邻的字符 例如mamad 第一次交换 ad : mamda转载 2015-03-14 00:44:29 · 1020 阅读 · 0 评论 -
最大乘积
输入n个元素组成的序列s,你需要找出一个乘积最大的连续子序列。如果这个最大的成绩不是正数,应输入-1(表示无解)。输入0结束输入。1。样例输入:32 4 -3样例输出:820C语言代码:#include #include int array[1000];int main(int argc,char ** argv)原创 2015-03-30 09:01:54 · 666 阅读 · 0 评论 -
回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。输出格式 输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。样例输入原创 2015-03-10 23:00:09 · 678 阅读 · 0 评论 -
最大最小公倍数
算法训练 最大最小公倍数 时间限制:1.0s 内存限制:256.0MB 问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1 6。转载 2015-03-29 09:01:23 · 656 阅读 · 0 评论 -
2的次幂表示
问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 现在约定幂次用括号来表示,即a^b表示为a(b) 此时,137可表示为:2(7)+2(3)+2(0) 进一步:7=2^2+2+2^0 (2^1用2表示) 3=2原创 2015-03-29 17:30:32 · 811 阅读 · 0 评论 -
芯片测试
问题描述 有n(2≤n≤20)块芯片,有好有坏,已知好芯片比坏芯片多。 每个芯片都能用来测试其他芯片。用好芯片测试其他芯片时,能正确给出被测试芯片是好还是坏。而用坏芯片测试其他芯片时,会随机给出好或是坏的测试结果(即此结果与被测试芯片实际的好坏无关)。 给出所有芯片的测试结果,问哪些芯片是好芯片。输入格式 输入数据第一行为一个整数n,表示芯片个数。 第原创 2015-03-12 19:41:08 · 955 阅读 · 0 评论 -
基础练习 Sine之舞
问题描述 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。 不妨设 An=sin(1–sin(2+sin(3–sin(4+...sin(n))...) Sn=(...(A1+n)A2+n-1)A3+...+2)An+1 FJ想让奶牛们计算Sn原创 2015-03-13 12:07:49 · 888 阅读 · 0 评论 -
基础练习 数的读法
问题描述 Tom教授正在给研究生讲授一门关于基因的课程,有一件事情让他颇为头疼:一条染色体上有成千上万个碱基对,它们从0开始编号,到几百万,几千万,甚至上亿。 比如说,在对学生讲解第1234567009号位置上的碱基时,光看着数字是很难准确的念出来的。 所以,他迫切地需要一个系统,然后当他输入12 3456 7009时,会给出相应的念法: 十二亿三千四百五十六万七千零九原创 2015-03-13 12:08:42 · 1112 阅读 · 0 评论 -
FJ的字符串
问题描述 FJ在沙盘上写了这样一些字符串: A1 = “A” A2 = “ABA” A3 = “ABACABA” A4 = “ABACABADABACABA” … … 你能找出其中的规律并写所有的数列AN吗?输入格式 仅有一个数:N ≤ 26。输出格式 请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空原创 2015-03-12 19:40:58 · 859 阅读 · 0 评论 -
除法
除法输入正整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列,2样例输入:62样例输出:79546/01238=6294736/01528=62分析:只需要枚举fghij就可以算出abcde,然后判断是否需要所有数字不相同即可。C语言代码:#in原创 2015-03-30 08:48:17 · 1381 阅读 · 1 评论 -
处理机调度--实时系统中的调度
目前业界比较认可并且已经成为业界的原创 2015-06-12 10:06:05 · 1727 阅读 · 0 评论 -
基于管道的进程间通信代码分析
用pipe()创建一个管道文件,然后用fork()创建两个生产进程和两个消费进程,它们之间通过pipe()传递信息。#include "sys/types.h"#include "sys/file.h"#include "stdio.h"#include "unistd.h"#include "string.h"#include "stdlib.h"char r_buf[4];原创 2015-06-05 00:19:55 · 1474 阅读 · 0 评论 -
获取掩码
在C语言中,可以通过调用如下的函数获取掩码int creat_mask( int starting_bit, int ending_bit ){ /*为保证进行逻辑移位而不是算术移位,将掩码声明为无符号类型*/ unsigned int mask = (unsigned) - 1; mask >>= INI_BITS - (starting_bit - ending_bit + 1原创 2016-01-27 12:34:46 · 1545 阅读 · 0 评论 -
数组名和指针
今天自己尝试写了一个小程序,但是运行时发生错误,就简单的回顾了一下C语言中的数组和指针,下面是这个小程序修改之后的正确的版本以及部分注释。#includeint main(int argc, char const *argv[]) { char str[] = "sdfdsgfd";//此处不能够使用指针 char *pstr = str; while ( *pstr ) {原创 2016-02-01 16:06:37 · 573 阅读 · 0 评论 -
Stack smashing detected
今天写程序时发现一个新的错误:Stack smashing detected,这个错误以前没有遇到,所以先上网查了一下,并记录下来解决这个问题的过程。首先这个程序的源代码如下,这个程序是用来求解1000以内的素数。#include#define TRUE '1'#define FALSE '0'int main(int argc, char const *argv[]) {原创 2016-02-02 14:39:43 · 4674 阅读 · 0 评论 -
C++中模板与用C语言中实现模板
1、模板的概念我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y){ return(x>y)?x:y ; }//函数2.转载 2016-03-05 10:02:16 · 6083 阅读 · 0 评论 -
Linux的SOCKET编程详解
1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有:消息(message)、共享存储区(shared memory转载 2016-02-29 15:00:05 · 850 阅读 · 0 评论 -
交换两个整数
今天写程序的时候回想起曾经好像在那见过没有使用中间变量进行两个整数的交换,马马虎虎地记得那时通过加减法来实现的,所以就查了一下资料,果然存在这这种方法,代码如下:void swap1 (int& x,int& y){ x=x+y; y=x-y; x=x-y;}void swap2 (int &x,int &y原创 2016-04-07 10:36:38 · 664 阅读 · 0 评论 -
Linux的并发套接字编程
近期学习了并发套接字编程,通过查找资料发现,并发套接字编程可以通过三种方式来实现:1.多线程2.多进程3.多路复用在上一篇博客中,我介绍了简单的socket模型,并且利用多进程实现了并发套接字编程。但是,我发现利用多进程实现的并发套接字编程需要很多的资源并且效率也不是特别的高,所以,下面来介绍一下通过多路复用实现的并发套接字,采取这种方式系统内核缓冲I/O数据,当某个I/O准备好后原创 2016-03-24 18:25:54 · 996 阅读 · 0 评论 -
c编译原理简介
1. 编辑器: 我们编写代码的一些窗口,如:记事本、word、notepad等。2. 编译器: 检查用户代码的一些语法错误并且将其编译成汇编代码。3.汇编器:将编译出来的文件变成目标代码(windows 下的.obj文件)4.连接器:将目标代码连接成为可执行文件(.exe),及双击就可以运行文件。5.集成开发环境(Integrated Development Env转载 2014-07-25 13:58:32 · 668 阅读 · 0 评论 -
递归的应用
递归的应用1.用递归实现从0到n(1)void f1(int n){ if (n >0) { f1(n-1);//打印0-(n-1) } printf("%d\n", n);}(2)void f2(int begin,int end){ if (begin > end) {原创 2015-05-24 16:14:30 · 618 阅读 · 0 评论 -
循环与递归
提起递归,其实大多数的递归都可以转化成循环,因为递归与循环之间存在某种相似性。下面我们来讨论讨论将循环转化成递归的问题。将循环改写成递归,主要分为以下两点:1.寻找相似性,若没有明显的相似性,则可以通过添加参数来主动构造2.寻找递归出口下面来举两个例子:1.给出一个数组,求数组的各项和分析:看到这道题,我们的第一个想法就是利用循环来遍历每一个元素,并求和。但是我们已经说啦,原创 2015-04-06 16:07:09 · 668 阅读 · 0 评论 -
信号量
在多个进程或者线程读写数据的时候,最终结果依赖于多个进程指令执行的顺序。为了解决这种问题,科学家们提出了几种并发机制,例如:信号量,管程,自旋锁,消息传递等机制。这里先来介绍一下信号量。信号量是用于进程之间传递信号的一个整数值,这里由sem表示。在信号量只有三种操作可以进行:初始化,P操作,V操作,这三种操作都是原子操作。P操作:sem = sem - 1;如果sem V操作原创 2015-06-27 00:57:26 · 846 阅读 · 0 评论 -
约瑟夫问题
问题内容:据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。首先从一个人开始,原创 2015-07-25 14:08:27 · 516 阅读 · 0 评论 -
将汉字保存在C语言字符中
其实在C语言中可以保存汉字,但是这种方式不作为推荐方法使用,这里只是介绍一个小技巧。#includevoid main(){ char x[] ="你好"; char y[] ="天气"; char t[] ="鲁"; char *p[] = {x,y,t}; printf("%s",p[2]);}原创 2015-03-29 08:13:12 · 20588 阅读 · 0 评论 -
Vi 命令总结
使用vi编辑一个文件:vi filename /*如果该文件存在,则打开;如果该文件不存在,则创建*/使用vi创建一个没有文件名字的文件:vi /*在保存的时候指定文件的名字*/启动vim时,当以-C选项启动时,vim会尽可能向像vi一样,运行在兼容模式以只读方式打开文件:vi -R fliename 或者 view filename根据保存在临时文件中的文件来恢原创 2015-11-15 14:36:31 · 1044 阅读 · 0 评论 -
scanf详解
转自:http://blog.sina.com.cn/s/blog_4d99abae0100dpxt.html当读入发生错误,或者是到达文件尾,scanf就会返回EOF这个宏的值。while(scanf("%d%d",&a,&b)!=EOF),这个语句就是说,当读取没有到达文件尾的话,就不停的读取。scanf 函数的返回值反映的是按照指定的格式符正确读入的数据的个数。如果输入数转载 2016-01-21 14:41:50 · 1073 阅读 · 0 评论 -
linux与windows回车换行符的区别
问题来源:“回车”(carriage return)VS “换行”(line feed)在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就转载 2016-01-21 15:44:40 · 1114 阅读 · 0 评论 -
处理文件
在头文件中提供处理问件的库函数。文件的两种类型:文本文件和二进制文件文本文件:将数据写入文本文件时,数据写入为字符,这些字符组成为数据行,在每一行的末尾用换行结束。如果写入的是二进制数据,例如int或者double类型,则先将其转化成字符类型,在写入文件二进制文件:将数据写入二进制文件时,总是写入一系列字节,与他在内存中的表现形式相同,例如double类型就是写入8个字节。总结原创 2016-01-14 00:13:28 · 599 阅读 · 0 评论 -
遍历数组并且删除其中某个元素
今天写课程设计的代码,在程序中有一部分代码涉及到遍历整个数组,并且检查数组中的每一个元素是否符合要求,对于不符号要求的数组元素删除之,刚开始的时候,就像平常写遍历数组的方式遍历,并且检查数组中的元素,对于不符合的删除它,代码片段如下:for (int i = 0; i < borrowList.size(); i++) { if(!( borrowList.get(i).getBroRe原创 2016-01-09 23:15:48 · 7434 阅读 · 0 评论 -
龟兔赛跑预测
问题描述 话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共同的特点——喜欢赛跑。于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔子和乌龟的赛跑。他发现,兔子虽然跑比乌龟快,但它们有众所周知的毛病——骄傲且懒惰,于是在与乌龟的比赛中,一旦任一秒结束后兔子发现自己领先t米或以上,它们就会停下来休息s秒。对于不同的兔子,t,s原创 2015-03-11 00:25:44 · 997 阅读 · 0 评论