在家没事做建什么网站好,网站导航提交入口大全,南阳网站建设aokuo,高端医疗器械网站源码本次因为是考前一天极速刷题#xff0c;所以没有讲解#xff0c;若有问题可私信。 目录 一、 查找同时空人员二、 老鼠回家-无回路三、函数调⽤关系四、东二食堂模拟五、栈帧 一、 查找同时空人员
【问题描述】
假设一共有6个手机基站#xff0c;都具有记录手机连接基站状…本次因为是考前一天极速刷题所以没有讲解若有问题可私信。 目录 一、 查找同时空人员二、 老鼠回家-无回路三、函数调⽤关系四、东二食堂模拟五、栈帧 一、 查找同时空人员
【问题描述】
假设一共有6个手机基站都具有记录手机连接基站状态的能力当手机进入和离开基站固定范围后基站将及时记录手机的连接信息
1、约定基站覆盖范围不存在重合也就是同一个手机在同一时间内只会处于一个基站覆盖范围内
2、同一个手机在同一个基站上多次连续登录属于正常情况说明该手机不断出入该基站的覆盖范围。
编写程序读入某一天多个基站的手机登录日志信息服务商提供的日志信息是按手机进入基站的时间排好序详见样例输入和一个要查找的人员手机号查找与该人员同时空人员的手机号即与该手机号基站相同且进入与离开时间有重叠的手机号若一手机号的进入时间与另一手机号的离开时间完全相同两手机号也算有重叠。。输出与指定手机号有时空重叠的手机号及所在基站。
基站的手机登录日志信息包括手机号11位的数字按字符串处理、基站编号一共为6个基站分别用大写字母A、B、C、D、E、F表示、登录时间和登出时间用长度为6的数字串表示例如093756表示9点37分56秒。
【输入形式】
先输入手机登录日志信息的条数小于1000条然后按上述格式分行输入手机登录日志信息手机号、基站编号、登录时间和登出时间之间以一个空格分隔。
【输出形式】
按照手机号由小至大进行排序分行输出与指定手机号有时空重叠的手机号及所在基站编号手机号与基站编号之间以一个空格分隔。手机号相同时按基站字母序排序输出。
【样例输入】
28
18222336979 F 060201 063539
18222336979 B 063601 063802
18222336979 C 063806 064607
18222336979 D 064615 065816
18222336979 A 065827 160003
18222336979 D 160013 161605
18222336979 C 161617 162633
18222336979 B 162702 172333
13810013509 C 080005 092537
13810013509 A 100356 124732
13810013509 C 125021 161619
13810013509 F 162315 163857
13810013509 B 163901 205602
13810013509 C 210509 230108
13810013509 D 230901 232556
13557912211 B 060615 080239
13557912211 E 120507 150309
13557912211 C 162633 163621
13557912211 B 163855 172209
13557912211 D 200609 230901
13985992766 A 070000 120203
13985992766 F 130506 160000
13985992766 B 160102 161503
13985992766 C 161617 163058
13985992766 E 163302 180709
13985992766 D 190005 200729
15857596331 D 000201 235051
13877882206 C 003123 220806
13557912211
【样例输出】
13810013509 B
13810013509 D
13877882206 C
13985992766 C
13985992766 D
15857596331 D
18222336979 B
18222336979 C
【样例说明】
先 输入了28条手机登录基站的日志信息然后输入手机号13557912211表示要查找与该手机号同时空的手机号。该手机号首先在6点6分15秒登录B 基站在8点2分39秒登出B基站在这个时间段内只有手机号18222336979 存在重叠指定手机号登录登出过E基站但没有存在重叠的手机号指定手机号在C基站与3个手机号发生重叠其余重叠情况类似。按照这些手机号由小至大进行排序分行输出与指定手机号有时空重叠的手机号及所在基站编号手机号相同时按基站字母序排序输出。
【评分标准】
该题要求查找与指定手机号同时空的手机号提交程序名为same.c。
#includestdio.h
#includestring.h
#includestdlib.h
#includestring.h
typedef struct node
{char phone[12];char station;int in;int out;
}NODE;
int N;
NODE* arr;
char tar[12];
int tarnum0;
int flag;
NODE same[100];
int samenum0;void SameTime();
int ifHaveSame(NODE,NODE);
void Insert(NODE);
void OutPut();
int main()
{scanf(%d,N);arr(NODE*)malloc(sizeof(NODE)*N);for(int i0;iN;i){scanf(%s %c %d %d,arr[i].phone,arr[i].station,arr[i].in,arr[i].out);}scanf(%s,tar);for(int i0;iN;i){if(strcmp(tar,arr[i].phone)0){tarnum;flagi;while(strcmp(tar,arr[i].phone)0)tarnum;break;}}SameTime();OutPut();
}
void SameTime()
{for(int i0;iN;i){int cmpstrcmp(tar,arr[i].phone);if(cmp0){int ntarnum-1;while(n--)i;}else{for(int jflag;jtarnumflag;j){if(arr[i].stationarr[j].station){if(ifHaveSame(arr[i],arr[j]))Insert(arr[i]);}}}}
}
int ifHaveSame(NODE a,NODE b)
{if(a.inb.outa.outb.in)return 1;else return 0;
}
void Insert(NODE n)
{int i0;for(;isamenum;i){if(strcmp(same[i].phone,n.phone)0same[i].stationn.station)return;}if(isamenum){same[samenum]n;}
}
int cmp1(const void* p1,const void* p2)
{return strcmp((*(NODE*)p1).phone,(*(NODE*)p2).phone);
}
int cmp2(const void* p1,const void* p2)
{return (*(NODE*)p1).station-(*(NODE*)p2).station;
}
void OutPut()
{qsort(same,samenum,sizeof(NODE),cmp1);for(int i0;isamenum;i){int starti;int num1;while(i1samenumstrcmp(same[i].phone,same[i1].phone)0){i;num;} if(num1)qsort(samestart,num,sizeof(NODE),cmp2);}for(int i0;isamenum;i){printf(%s %c\n,same[i].phone,same[i].station);}
}二、 老鼠回家-无回路
【问题描述】
老鼠离家去找食物要经过不断探索才能找到食物。某老鼠非常聪明在原路返回时能够避免找食物时多走的冤枉路找到直接回家的路。
编写程序读入该老鼠找食物过程中的轨迹记录然后分析出其原路回家的最佳路径即走过的路但不包括冤枉路。在此冤枉路指的是原路返回的路而且假设老鼠走过的路不会形成环。
算法提示使用栈保存老鼠走过的轨迹每当读入老鼠新的轨迹时检查栈顶元素判断新轨迹能否与栈顶轨迹抵消全部或部分然后进行入栈或出栈操作示例见样例说明。
【输入形式】
输入为一系列老鼠轨迹。老鼠轨迹以行进方向和步数对来表示。行进方向包括1-上、2-下、3-左、4-右步数为一个整数值行进方向和步数为0时表示输入结束。例如1-4表示向上行进4步1和4之间为英文减号“-”。各行进步数间以一个空格分隔。最后的0-0后为换行符。老鼠行走的总步数不超过1000步。 以上图为例图中数字为路的长度以老鼠的步数为单位老鼠从家开始找食物的轨迹输入如下
1-2 3-4 1-7 2-3 4-3 3-3 2-4 4-4 1-6 4-2 2-2 1-2 3-4 1-3 0-0
【输出形式】
按照上述要求输出老鼠从食物回家的最佳路径输出格式同输入最后一步后有无空格均可。
【样例输入】
1-2 3-4 1-7 2-3 4-3 3-3 2-4 4-4 1-6 4-2 2-2 1-2 3-4 1-3 0-0
【样例输出】
2-3 4-2 2-8
【样例说明】
老 鼠从家出发开始向上走前3次轨迹后栈的状态如下图所示轨迹4因为是往下走3步与栈顶的往上走7步1-7相比较属于原路返回的路可以从栈顶 轨迹中核减掉结果如下图所示轨迹6、7、8都是往回走结果如下图所示其它轨迹类似轨迹14后找到食物最后输出原路回家的最佳路径既将栈中的轨迹反向输出部分轨迹要合并。
【评分标准】
该题要求找到回家的最佳路径提交程序名为path.c。
#includestdio.h
#includestring.h
#includestdlib.h
#includestring.h
enum set {UP1,DOWN,LEFT,RIGHT};
typedef struct node
{enum set orient;int distance;
}NODE;
NODE* stack[1000];
int top0;void Push(int,int);
int isContrast(int,int);
void Return();
int main()
{int ori,distance;scanf(%d-%d,ori,distance);while(ori!0){Push(ori,distance);scanf(%d-%d,ori,distance);}Return();
}
void Push(int o,int d)
{NODE* new(NODE*)malloc(sizeof(NODE));new-oriento,new-distanced;if(top0){stack[top]new;return;}NODE* topitemstack[top-1];int judgeisContrast(topitem-orient,o);if(judge1){if(topitem-distanced)top--;else if(topitem-distanced){topitem-distance-d;}else{topitem-oriento;topitem-distanced-topitem-distance;}}else{stack[top]new;}
}
int isContrast(int a,int b)
{if(aUPbDOWN||aDOWNbUP)return 1;if(aLEFTbRIGHT||aRIGHTbLEFT)return 1;return 0;
}
void Return()
{int i0;for(;itop;i){int starti;int num1;while(i1topstack[i]-orientstack[i1]-orient){num;stack[start]-distancestack[i1]-distance;i;}if(num1){ii-num1;memmove(stackstart1,stackstartnum,sizeof(NODE)*(top-start-num));toptop-num1;}}for(int jtop-1;j0;j--){if(stack[j]-orientUP)printf(%d-%d ,DOWN,stack[j]-distance);else if(stack[j]-orientDOWN)printf(%d-%d ,UP,stack[j]-distance);else if(stack[j]-orientLEFT)printf(%d-%d ,RIGHT,stack[j]-distance);else if(stack[j]-orientRIGHT)printf(%d-%d ,LEFT,stack[j]-distance);}
}三、函数调⽤关系
【问题描述】
给定某能正常运⾏结束的⽤户函数调⽤栈信息当⼀个函数被调⽤时将⼊栈当调⽤返回时将出栈。编写程序对函数调⽤栈信息进⾏分析依据函数⼊栈和出栈信息分析函数调⽤关系即⼀个函数调⽤了哪些不同函数。并按运⾏时调⽤序输出调⽤关系。
说明
在⼀个函数中同⼀函数有可能被调⽤多次输出调⽤关系时只输出⼀次若⼀个函数没有调⽤其它函数则不输出调⽤关系函数运⾏时调⽤序是指函数在调⽤栈中的出现序。程序中不存在递归调⽤。函数名符合C语⾔标识符的规定函数名⻓度不超过20每个函数最多调⽤不超过10个不同函数程序中⽤户定义的函数个数不超过100。算法提示当⼀个函数⼊栈时它就是当前栈顶函数调⽤的⼀个函数。
【输⼊形式】
假设⽤8表示函数⼊栈操作⽤0表示当前函数出栈。当操作为8⼊栈时输⼊形式为
操作 函数名
当操作为0出栈时输⼊形式为
操作
所有⼊栈操作和出栈操作都是从标准输⼊分⾏输⼊假设调⽤栈中函数个数最多不超过200。开始时调⽤栈为空当调⽤栈再次为空时输⼊结束。
【输出形式】
按运⾏时调⽤先后顺序输出函数调⽤关系到标准输出每⾏为⼀个函数的调⽤关系信息包括函数名及被调⽤函数函数与被调⽤函数间⽤⼀个英⽂冒号“:”分隔被调⽤函数间⽤⼀个英⽂逗号“,”分隔最后⼀个函数名后跟⼀个回⻋。若⼀个函数没有调⽤其它函数则不输出。
【样例输⼊】
8 main 8 input 0 8 mysqrt 0 8 findA 0 8 findB 8 area 8 mysin 0 8 mycos 0 8 mysqrt 0 0 0 8 findC 8 area 8 mysin 0 0 8 mysqrt 8 max 0 0 0 8 output 0 0
【样例输出】
main:input,mysqrt,findA,findB,findC,ouput mysqrt:max findB:area area:mysin,mycos,mysqrt findC:area,mysqrt
【样例说明】
按照运⾏时调⽤函数的先后顺序依次输出了main、mysqrt、findB、area和findC的函数调⽤关系。其中main函数调⽤了6个函数按照运⾏时调⽤序依次输出。注意mysqrt函数先于findB等函数出现在栈中虽然mysqrt调⽤max较晚但要先输出其调⽤关系。
#includestdio.h
#includestring.h
#includestdlib.h
#define MAXLEN 21
#define MAXNUM 100
typedef struct node
{char name[21];char functions[MAXNUM][MAXLEN];int funcnum;
}FUNC;
FUNC* arr[100];
int index0;
char stack[200][MAXLEN];
int top0;void Push();
void OutPut();
int main()
{int op;do{scanf(%d,op);if(op8){Push();}else if(op0)top--;}while(top!0);OutPut();
}
void Push()
{char func[21];scanf(%s,func);int i0;for(;iindex;i){if(strcmp(arr[i]-name,func)0)break;}if(iindex){FUNC* new(FUNC*)malloc(sizeof(FUNC));new-funcnum0;strcpy(new-name,func);arr[index]new;index;}if(top0){strcpy(stack[top],func);top;}else{char* topitemstack[top-1];int i0;for(;iindex;i){if(strcmp(arr[i]-name,topitem)0){int j0;for(;jarr[i]-funcnum;j)if(strcmp(arr[i]-functions[j],func)0)break;if(jarr[i]-funcnum){strcpy(arr[i]-functions[j],func);arr[i]-funcnum;}break;}}strcpy(stack[top],func);top;}
}
void OutPut()
{for(int i0;iindex;i){if(arr[i]-funcnum){printf(%s:,arr[i]-name);int j0;for(;jarr[i]-funcnum-1;j){printf(%s,,arr[i]-functions[j]);}printf(%s\n,arr[i]-functions[j]);}}
}注以下两道题为助教原创题目
四、东二食堂模拟 #includestdio.h
#includestdlib.h
#includestring.h
#define MAX 200
typedef struct node
{int wtime;int starttime;int id;int face;
}STU;
STU queue[MAX];
STU wtime[MAX];
int ix0;
int N;
int Index0;
int Head0;void Push(STU);
void breakqueue(int);
int upgratewtime(int);
int cmp(const void* p1,const void* p2)
{return (*(STU*)p1).id-(*(STU*)p2).id;
}int main()
{scanf(%d,N);STU tmp;for(int i0;iN;i){scanf(%d %d %d,tmp.starttime,tmp.id,tmp.face);tmp.wtimetmp.starttime;Push(tmp);}int secondqueue[0].starttime;for(;;second){breakqueue(second);if(queue[Head].starttimesecond)wtime[ix]queue[Head];if(!upgratewtime(second)HeadN)break;}qsort(queue,N,sizeof(STU),cmp);for(int i0;iN;i){printf(%d %d\n,queue[i].id,queue[i].wtime);}return 0;
}
int upgratewtime(int sec)
{ int iHead;int flag0;for(;iNqueue[i].starttimesec;i){queue[i].wtime;flag1;}return flag;
}
void breakqueue(int sec)
{int iHead1;for(;iN;i){if(queue[i].starttimesec){if(i-Headqueue[i].face){STU tmpqueue[i];memmove(queue1Head,queueHead,sizeof(STU)*(i-Head));queue[Head]tmp;}}}
}
void Push(STU s)
{if(Index0){queue[Index]s;Index;return;}int iIndex-1;int ji;for(;j0;j--){if(queue[j].starttimes.starttime)queue[j1]queue[j];else{queue[j1]s;Index;break;}}if(j-1){queue[0]s;Index;}
}五、栈帧 #includestdio.h
#includestdlib.h
#includestring.h
typedef struct node
{char name[50];int frame;
}FUNC;
typedef struct state
{FUNC stack[100];int frametotal;int funcnum;
}STATE;FUNC stack[100];
int top-1;
FUNC functions[20];
STATE S[100];
int indexst0;
int N;void Insert();
int find(char*);
void updatestate();
int cmp1(const void* p1,const void*p2)
{return (*(STATE*)p2).funcnum-(*(STATE*)p1).funcnum;
}
int cmp2(const void* p1,const void*p2)
{return (*(STATE*)p2).frametotal-(*(STATE*)p1).frametotal;
}
void output();int main()
{scanf(%d,N);if(N0){printf(0\n);printf(0);return 0;}for(int i0;iN;i){scanf(%s %d,functions[i].name,functions[i].frame);}char ope[20];do{scanf(%s,ope);if(strcmp(ope,call)0){Insert();updatestate();}else if(strcmp(ope,return)0){top--;updatestate();}else if(strcmp(ope,frame)0){int x;scanf(%d,x);int jtop-x;for(int w0;wj;w){top--;}updatestate();}}while(top!-1);output();
}
void Insert()
{char ope_func[50];scanf(%s,ope_func);int framefind(ope_func);top;strcpy(stack[top].name,ope_func);stack[top].frameframe;}
void updatestate()
{memcpy(S[indexst].stack,stack,sizeof(FUNC)*(top1));S[indexst].funcnumtop1;S[indexst].frametotal0;for(int i0;itop1;i){S[indexst].frametotalstack[i].frame;}indexst;
}
int find(char* tar)
{for(int i0;iN;i){if(strcmp(functions[i].name,tar)0)return functions[i].frame;}
}
void output()
{qsort(S,indexst,sizeof(STATE),cmp1);int aS[0].funcnum;printf(%d\n,a);for(int i0;ia;i){printf(%s(%d) ,S[0].stack[i].name,S[0].stack[i].frame);}printf(\n);qsort(S,indexst,sizeof(STATE),cmp2);int bS[0].funcnum;int cS[0].frametotal;printf(%d\n,c);for(int i0;ib;i){printf(%s(%d) ,S[0].stack[i].name,S[0].stack[i].frame);}
}