您的位置:首页 > 编程语言

编程珠玑 第二章

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; //哪个数与最多可能拥有个数相等的时候,直接返回了。

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: