您的位置:首页 > 其它

2015美团笔试

2014-09-15 19:14 148 查看
用O(n)的算法,实现对一组无序的字母进行从小到大排序(区分大小写),相同的字母,小写在大写前

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int rightorder(char *src, char *des)
{
int m = strlen(src);
int tmp[100]={0};
int index=0;
int i,j=0;

for(i=0; i<m; i++)
{
if(src[i] <= 'z' && src[i] >= 'a')
{
tmp[(src[i]-'a')*2] ++;
}
if(src[i] <= 'Z' && src[i] >= 'A')
{
tmp[(src[i]-'A')*2 + 1]++;
}
}

for(i=0;i<100;i++)
{
if(tmp[i] != 0)
{
if(i%2 == 0)    //小写
{
for(j=0;j<tmp[i];j++)
{
des[index++] = (char)(i/2 +'a');
}
}
else                     //大写
{
for(j=0;j<tmp[i];j++)
des[index++] = (char)((i-1)/2+'A');
}
}
}

return 0;
}

int main(int argc, char *argv[])
{
char src[54] =  "0";
char des[54] = "0";
char a;
printf("输入字符串:\n");
scanf("%s",src);

rightorder(src, des);

printf("%s\n",des);
return 0;
}


给定N个磁盘,每个磁盘大小为D[i],i=0...N-1,现在要在这N个磁盘上"顺序分配"M个分区,每个分区大小为P[j], j=0....M-1,顺序分配的意思是:分配一个分区P[j]时,如果当前磁盘剩余空间足够,则在当前磁盘分配;如果不够,则尝试下一个磁盘,直到找到一个磁盘D[i+k]可以容纳该分区,分配下一个分区P[j+1]时,则从当前磁盘D[i+k]的剩余空间开始分配,不在使用D[i+k]之前磁盘末分配的空间,如果这M个分区不能在这N个磁盘完全分配,则认为分配失败,请实现函数,is_allocable判断给定N个磁盘(数组D)和M个分区(数组P),是否会出现分配失败的情况。举例:磁盘为[120,120,120],分区为[60,60,80,20,80]可分配
,如果为[60,80,80,20,80]则分配失败

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
int A[3] = {120,120,120};
int B[5] = {60,60,80,20,80};
//int B[5] = {60,80,80,20,80};

int M = sizeof(B)/sizeof(int);
//printf("%d\n",M);
int N = sizeof(A)/sizeof(int);
//printf("%d\n",N);
int i,j=0;

int flag =0;

for(i=0; i< N; i++)
{
while(A[i]>0)
{
if(A[i] >= B[j])
{
A[i] = A[i] -B[j];
printf("%d\n",A[i]);
j++;
//printf("%d\n",j);

if(j == M)
{
//printf("分配成功\n");
flag = 1;;
}

}
else
break;
}
}

if (flag == 1)
{
printf("分配成功\n");
}
else
printf("分配失败\n");

return 0;
}


给定正整数X,定义函数A(n)=1+x+x^2+x^3+...+x^n(n为整数且>=0),已知乘运算的时间远大于加运算,

输入x,n:如何尽可能快的求出A(n)。这题应该有更好的解决方法吧。。
int func(int x, int n)
{
int tmp = 1 + x;
for(i=0;i<n;i++)
{
tmp = tmp *x +1;
}
return tmp;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: