编程珠玑 第二章
2015-03-31 23:03
246 查看
A.给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中一32位整数。
bit那个地方不理解,写在注释里了
int get_lost(int *a, int *b, int *c, int alen, int bit)
{
int re = 0, v = 0, biter = 0, *t, citer, i = 0;
if (!a || !b || alen ==(unsigned long)( (1<< bit))) return -1; //哪个数与最多可能拥有个数相等的时候,直接返回了。
B.字符串循环移位
比如abcdef 左移三位,则变成defabc
bit那个地方不理解,写在注释里了
int get_lost(int *a, int *b, int *c, int alen, int bit)
{
int re = 0, v = 0, biter = 0, *t, citer, i = 0;
if (!a || !b || alen ==(unsigned long)( (1<< bit))) return -1; //哪个数与最多可能拥有个数相等的时候,直接返回了。
while (bit--) { v = (1 << bit); //并不知道为什么,bit=位数?为什么要左移? for (biter = citer = i = 0; i < alen; ++i) { if (a[i] & (1 << bit)) b[biter++] = a[i];//若这一位是1,把这个数存到b,标志+1 else c[citer++] = a[i]; //存到c,标志+1 } if (biter <= citer) //比较bc中哪数组长,如果b短,说明缺少的数在b中 { re += v; //缺少的数的这一位写上 t = a; a = b; b = t; //交换ab,即现在待检索的是b了 alen = biter; } else { t = a; a = c; c = t; //不用写上这一位因为是0,交换ac alen = citer; } } return re; }
B.字符串循环移位
比如abcdef 左移三位,则变成defabc
static void res(char *a,int n){ char t;int i=0;j=n-1; while(i<j){ t=a[i];a[i]=a[j];a[j]=t; ++i;++j; } } char *rever(char *a,int n,int len){ int i,j; if(!a||!n)return a; res(a,n-1); res(a+n,len-n); res(a,n); return a; }
相关文章推荐
- 【编程珠玑(续)】第二章 关联数组
- 字符串循环左移——编程珠玑第二章B
- 《编程珠玑》第二章
- 编程珠玑第二章变位词1
- 编程珠玑--------第二章习题笔记
- 《编程珠玑》第二章2.8 变位词 思路
- 编程珠玑第二章A题
- 编程珠玑 第二章 习题 2 给定一个包含4300000000个32位证书的顺序文件,求出一个至少包含两次的整数
- 博客总结九——Hadoop、Redis配置以及编程珠玑第二章的思考
- 编程珠玑(2)第二章学习笔记
- 向量旋转算法《编程珠玑》第二章笔记
- 《编程珠玑》第二章——“啊哈!算法”
- 《编程珠玑》第二章 “杂技算法” 和 “翻转算法” Java语言版
- 编程珠玑第二章的算法实现
- 《编程珠玑》第二章三个问题A---查找40亿个32位整数中缺失的某个整数
- 编程珠玑第二章问题B: n元一维向量旋转问题之java实现
- 编程珠玑第二章
- 编程珠玑-第二章问题A
- 《编程珠玑》第二章问题C:找出相同的英文单词(单词改变顺序可以互相转化即为相同)
- 《编程珠玑》-第二章:寻找兄弟单词+电话簿功能 算法研究