您的位置:首页 > 其它

做错的笔试题汇总

2011-09-05 17:00 148 查看
设在内存中有P1、P2、P3三道程序,并按照P1、P2、P3的优先次序运行,其内部计算和I/O操作时间由下图给出:
P1:计算 60ms----------------I/O 80ms-----------------计算 20ms
P2:计算 120ms--------------I/O 40ms-----------------计算 40ms
P3:计算 40ms----------------I/O 80ms-----------------计算 40ms
调度程序的执行时间忽略不计,完成这三道程序比单道运行节省的时间是(C )
A、80ms B、120ms C、160ms D、200ms

解析:首先P1计算60ms,然后I/O 80ms,在这80ms中,P2也同步开始计算,等P1的I/O运行完了,CPU停止P2的计算,转去做P1后期那20ms的运算,至此所花时间为60+80+20=160ms;然后CPU再去接着运算P2,40ms,然后p2I/O运行40ms,在此期间,cpu去计算p3,正好也是40ms,算完之后接着算p2的后期部分,40ms,在此期间,因为p3的前40ms已经计算完成,可以进行i/o操作,所以同时p3的i/o也开始运行,运行80ms,这80ms中,前40msCPU在算P2,后40msCPU在算P3,所以是:40+40+40+80=200ms,加上前面的160,为360ms。
而如果是单道运行,则时间花费为:60+80+20+120+40+40+40+80+40=520ms,相差为520-360=160ms ,选c

二分搜索(递归与非递归)

int bsearch1(int a[], int x, int low, int high)
{
if (low > high)	return -1;
int mid = (low+high)/2;
if (x<a[mid]) return bsearch1(a,x,low,mid-1);
else if(x>a[mid]) return bsearch1(a,x,mid+1,high);
else return mid;
}

int bsearch2(int a[], int x, int len)
{
int low = 0;
int high = len-1;
while (low<=high)
{
int mid = (low+high)/2;
if (x<a[mid]) high=mid-1;
else if (x>a[mid]) low=mid+1;
else return mid;
}
return -1;
}

题目:求符合指定规则的数。
给定函数d(n) = n + n的各位之和,n为正整数,如 d(78) = 78+7+8=93。 这样这个函数可以看成一个生成器,如93可以看成由78生成。
定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出1至10000里的所有符合数A定义的数。
输出:
1
3


#include<iostream>
using namespace std;

#define MAX_AREA 10000

int main()
{
unsigned int t=MAX_AREA/32,t1;
unsigned int mem_tmp[MAX_AREA/32]={0};
unsigned int tmp,tmp1,j;
for(int i=3;i<=MAX_AREA;++i){
tmp=j=i;
//caculate the sum
do{
tmp+=j%10;
j/=10;
}while(j!=0);

//fill the mem
t1=tmp/32;
if(t1>t)
{
cout<<"================="<<endl;
continue;
}
mem_tmp[t1]|=((unsigned int)1<<(tmp%32-1));
}

//now output
for(i=3;i<=MAX_AREA;++i){
if(!(mem_tmp[i/32]&(unsigned int)1<<(i%32-1))){cout<<i<<endl;}
}

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