2015美团笔试
2014-09-15 19:14
148 查看
用O(n)的算法,实现对一组无序的字母进行从小到大排序(区分大小写),相同的字母,小写在大写前
给定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]则分配失败
给定正整数X,定义函数A(n)=1+x+x^2+x^3+...+x^n(n为整数且>=0),已知乘运算的时间远大于加运算,
输入x,n:如何尽可能快的求出A(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; }
相关文章推荐
- 美团2015笔试题以及最优解(一)
- 美团2015笔试题以及最优解(四)
- 2015美团校招部分笔试题
- 2015美团校招笔试试题
- 美团2015校招哈尔滨站笔试题文字版+图片(2014-9-11)全
- 2015美团校招部分笔试题
- 腾讯 美团 百度 网易游戏 2015校园招聘南京笔试面试之总结分析
- [历年IT笔试题]美团2015校园招聘笔试题
- 腾讯 美团 百度 网易游戏 2015校园招聘南京笔试面试之总结分析
- 美团2015校园招聘笔试题
- 2015美团算法工程师笔试、面试之旅
- 美团2015校招哈尔滨站笔试题--第二题
- 美团2015 研发笔试 (1)
- 2015美团校招部分笔试题
- 美团2015 研发笔试 (1)
- 美团2015笔试题以及最优解(二)
- 美团2015校招研发笔试题--编程
- 美团2015 研发笔试 (2)
- 算法-美团2015校招笔试:写一个复杂度为n的排序算法
- 美团2015笔试题以及最优解(三)