C程序练习
wdkirchhoff
这个作者很懒,什么都没留下…
展开
-
确定主机字节序的程序
int main(int argc,char **argv) { int sockfd, n; char buf[MAXLINE]; union { short s; char c[sizeof(short)]; } un; un.s = 0x0102; if (sizeof(short) == 2) {原创 2015-05-24 09:48:58 · 1402 阅读 · 0 评论 -
HDU 2710 Max Factor (筛选求素数)
Max FactorTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3995 Accepted Submission(s): 1301Problem DescriptionTo improve the原创 2014-12-10 14:41:09 · 988 阅读 · 0 评论 -
HDU 4911 Inversion (归并排序求逆序对)
InversionTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1898 Accepted Submission(s): 743Problem Descriptionbobo has a sequ原创 2014-12-11 12:00:05 · 1107 阅读 · 0 评论 -
九度OJ 1207 质因数的个数 (筛素数,勉强AC)
1 秒内存限制:32 兆特殊判题:否提交:4466解决:1375题目描述:求正整数N(N>1)的质因数的个数。相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。输入:可能有多组测试数据,每组测试数据的输入是一个正整数N,(1输出:对于每组数据,输出N的质因数的个数。样例原创 2014-12-10 16:26:10 · 2354 阅读 · 1 评论 -
HDU 1425 sort (排序)
sortTime Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 28997 Accepted Submission(s): 8796Problem Description给你n个整数,请按从大到小的顺序输出其中原创 2014-12-11 16:34:02 · 1443 阅读 · 0 评论 -
HDU 1894 String Compare (排序)
String CompareTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 3124 Accepted Submission(s): 740Problem DescriptionMaybe there原创 2014-12-11 15:25:51 · 979 阅读 · 0 评论 -
HDU 1425 sort (hash)
sortTime Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 29001 Accepted Submission(s): 8799Problem Description给你n个整数,请按从大到小的顺序输出其中原创 2014-12-11 17:00:41 · 889 阅读 · 0 评论 -
希尔排序
(摘自wiki) 一个更好理解的希尔排序实现:将数组列在一个表中并对列排序。重复这过程,不过每次用更长的列来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身仅仅对原数组进行排序(通过增加索引的步长,例如是用i += step_size而不是i++)。例如,假设有这样一组数[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25原创 2014-12-08 20:47:48 · 1069 阅读 · 0 评论 -
POJ 2299 Ultra-QuickSort (归并排序)
Ultra-QuickSortTime Limit: 7000MS Memory Limit: 65536KTotal Submissions: 43446 Accepted: 15822DescriptionIn this problem, you have to analyze a particular sorting原创 2014-12-09 00:17:17 · 3042 阅读 · 1 评论 -
归并排序
归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。算法描述归并操作的过程如下:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列设定两个指针,最初位置分别为两个已经排序序列的起始位置比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复步骤3直到某一指针到达序列尾将另原创 2014-12-08 22:19:02 · 830 阅读 · 0 评论 -
HDU 1157 Who's in the Middle (快速排序 or 任意排序)
Who's in the MiddleTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9903 Accepted Submission(s): 4736Problem DescriptionFJ is原创 2014-12-11 13:52:52 · 2223 阅读 · 0 评论 -
HDU 1280 前m大的数 (排序)
前m大的数Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11508 Accepted Submission(s): 3966Problem Description还记得Gardon给小希布置的那个作业原创 2014-12-11 17:51:21 · 987 阅读 · 0 评论 -
找到轮转后的有序数组中第K小的数
我们可以通过二分查找法,在log(n)的时间内找到最小数的在数组中的位置,然后通过偏移来快速定位任意第K个数。 此处还是假设数组中没有相同的数,原排列顺序是递增排列。 在轮转后的有序数组中查找最小数的算法如下:int findIndexOfMin(int num[],int n) { int l = 0; int r = n-1; while(l原创 2015-04-15 22:35:20 · 1224 阅读 · 0 评论 -
LeetCode Remove Duplicates from Sorted Array II
Remove Duplicates from Sorted Array II Total Accepted: 32492 Total Submissions: 105872My SubmissionsQuestion Solution Follow up for "Remove Duplicates":What if duplicates are a原创 2015-02-15 23:21:10 · 865 阅读 · 1 评论 -
LeetCode Remove Duplicates from Sorted Array
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra space for another array, you must do this in place with原创 2015-02-15 23:25:04 · 754 阅读 · 1 评论 -
螺旋队列问题
问题1:看清以下数字排列的规律,设1点的坐标是(0,0),x方向向右为正,y方向向下为正,例如,7的坐标为(-1,-1),2的坐标为(1,0),3的坐标为(1,1)。编程实现输入任意一点坐标(x,y),输出所对应的数字。21 22 ...20 7 8 9 1019 6 1 2 1118 5 4 3 1217 16 15 14 13解析:规律能看出来,原创 2015-02-15 19:24:50 · 1627 阅读 · 1 评论 -
fseek、fread和fwrite
首先这几个函数的使用方法请移步fseek 点击打开链接fread点击打开链接fwrite点击打开链接进入正题:在更新一个顺序文件中选定的记录时,我们需要对文件可读又可写,为了保持与过去不能同时进行读写操作的程序的向下兼容性,一个输出操作不能随后直接紧跟一个输出操作,反之亦然。如果要同时进行输入和输出操作,必须在其中插入fseek函数的调用。fseek(fp,0L,1);这个原创 2015-02-13 09:24:19 · 4037 阅读 · 0 评论 -
华为机试—从5个人中选取2个人作为礼仪
要从5个人中选取2个人作为礼仪,其中每个人的身高范围为160-190,要求2个人的身高差值最小(如果差值相同的话,选取其中最高的两人),以升序输出两个人的身高。Sample input: 161 189 167 172 188 Sample output: 188 189#include#includeint cmp(const void *a,原创 2015-01-02 09:32:34 · 2061 阅读 · 0 评论 -
scanf 之 %2s 与 %2d
在scanf语句中%*s,在c语言中的说明是该处的*表示忽略该处的变量输入。还是看一下下面的程序说明吧:#includeint main(){ int a,b; scanf("%2d%*2s%d",&a,&b); printf("\na=%d,b=%d\n",a,b); return 0;}运行结果:输入:12345678输出:a=原创 2015-02-08 14:47:25 · 10837 阅读 · 2 评论 -
华为机试—统计字符次数
手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出。例子:输入:aaabbbccc输出:a 3 b 3 c 3/* 解题思路:使用map即可 */#include#include#includeusing namespace std;int ma原创 2015-01-02 09:37:34 · 1544 阅读 · 0 评论 -
HDU 3785 寻找大富翁 (排序)
寻找大富翁Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4132 Accepted Submission(s): 1698Problem Description浙江桐乡乌镇共有n个人,请找出该镇上的前原创 2014-12-12 08:41:30 · 1249 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number (树状数组)
依旧是再练习下树状数组的使用:题目大意: 给出N个数,这些数可以把后面的删掉然后放到最前面形成新的序列 可得到的N种情况,求出这N种情况哪种的逆序数最小解题思路: 先求出第一个序列的逆序数,然后用很巧妙的办法求下一个序列的逆序数,直到全部求出 序列 4 5 2 1 3 6 ,此序列的逆序数为原创 2014-12-09 23:31:23 · 734 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number (归并排序求逆序对)
Minimum Inversion NumberTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11840 Accepted Submission(s): 7258Problem Description原创 2014-12-09 11:34:20 · 986 阅读 · 1 评论 -
单链表的插入操作
从C和指针这本书中学到的优化插入函数写法:#includetypedef struct Node{ int value;struct Node*link;}Node;int sll_insert(Node **linkp,int new_value){ Node *current=*linkp; while(current!=NULL&¤t->value<ne原创 2014-11-25 17:46:06 · 1142 阅读 · 0 评论 -
二进制数据存储
二进制数据存储Table of Contents1 问题2 解析3 代码1 问题编写一个函数,把一个给定的值存储到一个整数中指定德几个位,它的原型如下:int store_bit_filed(int orginal_value,int value_to_store,unsigned starting_bit,unsigned ending_bit);原创 2014-11-05 00:25:16 · 1144 阅读 · 0 评论 -
qsort和sort
qsort和sort的区别 qsort基本快速排序的方法,每次把数组分成两分和中间的一个划分值,而对于有多个重复值的数组来说,基本排序的效率较低。集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决这个问题。所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分。函数对buf 指向的数据按升序排序。使用方法:原创 2014-11-26 09:49:45 · 942 阅读 · 0 评论 -
求n的算术平方根(计算平方根的巴比伦的方法)
求n的平方根Table of Contents1 公式2 程序代码1 公式正数n的平方根可以通过计算一系列近似值来获得,每个近似值都比前一个更加接近准确值,第一个近似值是1,接下来的近似值则通过下面的公式来获得:ai+1=(ai+n/aai)/22 程序代码#include#includeint main(int argc原创 2014-11-02 00:51:09 · 5577 阅读 · 0 评论 -
BFS、双向BFS和A*
BFS、双向BFS和A*Table of Contents1. BFS2. 双向BFS3. A*算法光说不练是没用的,我们从广为人知的POJ 2243这道题谈起:题目大意:给定一个起点和一个终点,按骑士的走法(走日字),从起点到终点的最少移动多少次设A为寻路起点,B为目标终点。1 BFSBFS其实是退化的A*算法,因为他没有启发函数做指引原创 2014-11-14 17:49:34 · 26298 阅读 · 8 评论 -
extern int *a与extern int a[]
指针与数组的区别原创 2014-11-10 22:16:19 · 3200 阅读 · 0 评论 -
strtok函数和strtok_r函数
strtok函数和strtok_r函数网络上一个比较经典的例子是将字符串切分,存入结构体中。如,现有结构体typedef struct person{char name[25];char sex[10];char age[4];}Person;需从字符串 char buffer[INFO_MAX_SZ]="Fred male 25,John male 62,Anna femal转载 2014-11-11 14:50:45 · 1121 阅读 · 2 评论 -
UNIX的段错误和总线错误和Windows的保护性异常
UNIX的段错误和总线错误和Windows的保护性异常原创 2014-11-05 12:28:29 · 16170 阅读 · 4 评论 -
C分解质因数
今天看到一个题目:将一个正整数分解质因数。例如:输入2409,打印出2409=3*11*73。题目中给出了解题的分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n!=k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果原创 2014-03-29 13:57:25 · 890 阅读 · 0 评论 -
数组的关系运算
观察一个循环,它用来清除一个数组中所有的元素。#define N_VALUES 5float values[N_VALUES];float *vp;for(vp=&values[0];vp<&values[N_VALUES];) *vp++=0;for语句使用了一个关系测试来决定是否结束循环,这个测试是合法的,因为vp和指针常量都指向同一数据中的元素(事实上,原创 2014-11-25 15:36:30 · 1112 阅读 · 0 评论 -
实现位数组
实现位数组Table of Contents1 问题2 解答1 问题编写一组函数,实现位数组。函数的原型应该如下:void set_bit(char bit_array[],unsigned bit_number);void clear_bit(char bit_array[],unsigned bit_number);void assign_b原创 2014-11-04 23:23:13 · 1412 阅读 · 0 评论 -
HDU 3743 Frosh Week (归并排序)
Frosh WeekTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1919 Accepted Submission(s): 619Problem DescriptionDuring Frosh Wee原创 2014-12-09 10:02:32 · 1546 阅读 · 0 评论 -
冒泡排序,选择排序,插入排序的区别
#includeint swap(int *a,int *b){ int t=*a; *a=*b; *b=t;}/* 冒泡排序的原理:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后。最将剩下的N-1个数继续比较,将次大数移至倒数第二位。 依此规律,直至比较结束。 冒泡排序的代码如下: */void原创 2014-12-07 14:02:56 · 14168 阅读 · 7 评论 -
二进制翻转
二进制翻转Table of Contents1 要求2 分析3 题解1 要求请编写函数unsigned int reverse_bits(unsigned int value);这个函数的返回值是把value的二进制位模式从左到右变换一下后的值。例如:在32位机器上,25这个值包含下列各个位:000000000000000000000000原创 2014-11-04 23:19:58 · 2063 阅读 · 0 评论 -
do...while(0)的妙用
转载出处:点击打开链接在C++中,有三种类型的循环语句:for, while, 和do...while, 但是在一般应用中作循环时, 我们可能用for和while要多一些,do...while相对不受重视。 但是,最近在读我们项目的代码时,却发现了do...while的一些十分聪明的用法,不是用来做循环,而是用作其他来提高代码的健壮性。1. do...while(0)消除go转载 2014-12-02 15:19:47 · 575 阅读 · 0 评论 -
C++ 关键字 static register const volatile extern
C++ 关键字static,register,const,volatile,externstatic 静态变量作用范围在一个文件内,程序开始时分配空间,结束时释放空间,默认初始化为 0,使用时可改变其值。静态变量或静态函数,只有本文件内的代码才可访问它,它的名字(变量名或函数名) 在其他文件中不可见。在函数体内生成的静态变量,它的值能够一直维持。在C++类的成员变量被声明为st原创 2014-12-02 11:15:44 · 1173 阅读 · 0 评论 -
#define替换
#define替换Table of Contents1 #与##2 宏与函数1 #与###argument这种结构被预处理器翻译成“argument”,这种翻译可以让你像下面这样编写代码:#define PRINT(FORMAT,VALUE)\ printf("the value of " #VALUE \ "is "原创 2014-11-24 11:15:07 · 2937 阅读 · 0 评论