一、算法分析题(本大题共3小题,选做2题,每小题40分,共80分)
1. 逃学威龙。
john无心向学,总是打逃课的主意,他确信他的期末考试绝对能够考过,但是老师可不相信他,因此老师定下了一条规矩,最后的期末成绩将由平时成绩和考试成绩组成,各占50%的分数,也就是满分100分,其中平时成绩50分,考试成绩50分。而老师为了不让同学们逃课,平时成绩将仅由出勤情况确定,每点名到一次逃课就要扣掉10分的平时成绩。
john很不满于老师这套想法,决心要将翘课进行到底,他有足够的信心和实力在期末考中得到满分,剩下的就只看平时成绩了,只要他在平时成绩中保留的分数》=10分,他这个学期就可以合格。他甚至为此充分调查了老师的点名习惯,发现如下规律:
每个学期这门课程共有k个课时(k<=20),而对于某节课老师点不点名是一个独立的事件,并且老师在某一节课点名的概率是p(0.0<=p<=1.0),现在fish_ball想尽可能多的逃课,但是要保证他有90%以上的概率不挂掉这门课,问fish_ball这个学期最多能翘掉多少课?
输入规格:第一行是一个整数c,c<=20,紧接着c组数据,每组数据包含一行,依次给出整数k (1<=k<=20)和p(0.0<=p<=1.0),如题目中所描述。
输出规格:对于每组数据,输出一个整数,表示john这学期最多能够翘掉几堂课。
算法分析:设john逃课次数为skipnum,课程总数为classnum,当skipnum<=classnum时,在skipnum次逃课中,john被点名的次数 <=4 的概率(realpossibility) >0.9 ( 即90% )则john可以通过该课程。
realpossibility等于在skipnum次中分别被点次的概率之和,即 :
realpossibility =
当满足 realpossibility >=0.9 时求的的skipnum最大值即为john最大可逃的课程数。
程序:#include <>
#include ""
struct ke;
int classnumclassnum 为课程总数。
float pp为每节课老师点名的次数。
int skipnum = 5skipnum为john逃课次数。
double getpossibility(int a,int b,double p );用于求a(skipnum)次逃课中被点b次的概率。
double getrealpossble(int a2,int b2,double p2);/求skipnum次中分别被点0-4次的概率和。
void main()
int c;
cout<<"input:"
ke *ke=new ke[c];
for(int i=0;i
cout<<"output:" double getrealpossble(int a2,int b2,double p2) double sump=0; int tempct=b2; while (tempct>=0) sump=sump+getpossibility(a2,tempct,p2); tempct--; return sump; ***get possibility double getpossibility(int a,int b,double p1) int countup=1; int sumup=1; double sumall; int sumdown=1; int temp = a; while (countup<=b) sumup=sumup*a; a--;countup++; for(int i=1;i<=b;i++) sumdown=sumdown*i; sumall=sumup/sumdown; return sumall*pow(p1,b)*pow(1-p1,temp-b); input output 2. 赶公交。 alfred在大学新区上学,他每个星期都要到市区学琴,因此要在每个星期六的10点钟之前赶到琴行上课,从郑大坐68路车到琴行要花整整一个小时,而68路车是每半小时一趟,整点和30分的时候会发一趟车。 这一次,alfred起床晚了,一看表已经8点多了,匆忙收拾了一下之后,alfred马上冲向公交站,但是,由于路况不佳,在前面的一段路上满是泥泞。路况如下: 如左图,a(xa,ya)是alfred现在所处的位置,b(xb,yb)是公交站(bus-stop)的位置,其中y>0的区域是泥泞的地面,alfred在泥泞的地面上的移动速度是v1(米/秒),而y<0的区域是水泥地,alfred在水泥地上的移动速度只有v2(米/秒),其中v1<=v2,a在第二象限,b在第四象限。 alfred是一个物工院的学生,他稍微估算了一下,剩下的时间已经不多了,他看看表,现在离9点整只剩下t秒了 (t由题目给出),alfred想知道,他如果用最优的策略赶往公交站,今天的课是否会迟到。 输入规格:第一行是一个整数c,c<=10,紧接着c组数据,每组数据依次给出xa,ya,xb,yb,v1,v2 和t,他们的意义如上文所述,x,y坐标的单位是米,所有坐标的绝对值<109,t是一个整数。 输出规格:对于每组数据,输出yes或no,表示alfred会不会迟到。 算法:在x轴上取p(p,0),对每组数据,给出xa,ya,xb,yb,v1,v2.,xa==0,yes;t-t<0,no. 第二题。。。不粉我你什么心态。 #include #include #include #include using namespace std; class zuobiao//基坐标。 protected :double x,y; public:virtual void run()=0; virtual void print()=0; double getx(); double gety(); class a:public zuobiao//a坐标。 public:a() void run(); void print(); class b:public zuobiao//b坐标。 public:b()void run();void print(); class alfred//人物。 public:alfred() void setspeed();void calc();void print(); private:a a;b b;double v1,v2;double t; double zuobiao::getx() double zuobiao::gety() void a::run() void b::run() void a::print()} void alfred::print() cout<<"v1=" 6小时(十进制),并规定:若有多辆车同时到达,装车的优先次序是:大车≥中车≥小车。 不记装车时间。问:(1)最后一趟车是那种车? (2)大、中、小车各运多少趟? 算法:设时间为t,然后起始t=0,剩余货物为m=1000-5-2-3,对t进行循环,在循环里,分开三种判断,1,t整除20等于0,就令m-5;2,t整除18等于0;就令m-3;3,t整除16=0,就令m-2; 每循环一次t自加一次;当m<=0时,循环结束。此时再进行判断:若t整除20等于0,最后为大车;若t整除18等于0,最后为中车;若t整除16=0,最后为小车。 大车趟数:t/20+1;中车趟数:(t-1)/18+1,小车趟数:(t-1)/16+1 #include <> void main () int i=0,left=1000-5-3-2; while (1) if (i%20==0) printf("最后一趟是大车"); elseprintf("大车运输了%d次中车运输了%d次小车运输了%d次",i/20+1,(i-1)/18+1,(i-1)/16+1); #include using namespace std; int main() 一 单项选择题 30分 1.下列不属于算法应该具有的特性是 a.确定性 b.有穷性 c.可行性 d.有零个或者多个输入。2.以下不正确c语言标识符是 b.abc c.bc 3.计算机能直接执行的程序是 a.源程序 b.目标程序 c.汇编程序 d.可执行程序。4.以下运算符优先级最高的是 a.b.c.... 考生必须将答案做在前面的答题纸上!试题一 28分,每小题4分 解答下列各小题,把解答写在答卷的对应栏内。1 试写出下列数学表达式的c语言表达式。2 满足关系式 a ch z 的c语言表达式是。a 65 ch ch 90b ch a z ch c a ch zd ch a z ch 3 设a 1 b ... c语言程序设计 期末考试说明。1.所有c语言程序设计内容全部列为考试内容,但类似于栈 链表等数据结构方面的内容及排序 查找等算法本身不列入考试内容,同时问题求解本身也不列为考试内容,但考试中可能会涉及问题求解 排序 查找等算法,此时会以流程图或伪 的形式给出问题求解过程或算法的描述,请同学们一定要熟...C语言程序设计期末考试试题
《C语言程序设计》期末考试试题
C语言程序设计期末考试说明