回顾这一周,除了周日有点开摆,总的来说还是挺充实的。这周刚开始的话,是在学习结构体和函数的用法,看了挺多教材和网课,学会了结构体按一定条件来排序。下面列举一个我强行把老师作业按结构体来做。
#include//刚刚学了一下结构体,想在这道题试一试,虽然可能比两个数组更麻烦; #include //定义一个结构体 struct node{ char name[20]; int num; }; void fun1(struct node a[15])//输入十个名字加职工号 { for(int i=0;i<10;i++) { scanf("%s%d",a[i].name ,&a[i].num); getchar(); } } void fun2(struct node a[15])//将十个人按职工号大小排序,没有考虑号码相同时按名字大小排序 { struct node b[15]; for(int i=0;i<10;i++) { for(int j=0;j<9-i;j++) { if(a[j].num>a[j+1].num)//因为数据较少用了冒泡 { b[0]=a[j]; a[j]=a[j+1]; a[j+1]=b[0]; } } } } void fun3(struct node a[15])//二分法找出符合的职工号,然后找出名字 { int max=9,min=0; for(int i=0;i<4;i++)//十个数据最多用四次 { int mid=(max+min)/2; if(a[mid].num==a[10].num) { a[10]=a[mid]; break; } else if(a[mid].num>a[10].num) max=mid-1; else min=mid+1; } } int main() { struct node a[15]; fun1(a); fun2(a); scanf("%d",&a[10].num );//输入要寻找的职工号 fun3(a); printf("%s",a[10].name);//找出对应的名字 }
然后就是这周的一些动态规划和贪心算法了,由于题组关了就不举例了;周六参加了新星杯,就因为一道题老是71%不然能达到理想目标的,但是比上次感觉还是有点进步的,下次继续加油!
这是我除了两道签到题写出来的唯一一道有一点点难度的题;
无聊的会长今天出去打狂犬疫苗,因为被来福咬了。路上会长路过了一个十字路口,在等红绿灯,发现时间居然是99秒,会长觉得这很不合理,于是想要自己设计一套红绿灯算法,但是由于会长刚刚被喵咬了还没打狂犬疫苗,出现了短暂的神志不清,就连基本的红绿灯合理性都判断不出来了,你能帮帮会长吗?
如图,一个十字路口(双向车道),有四个信号灯(图中用数字标示),有两种信号左转和直行(右转可以直接走),只考虑红灯(停止信号)和绿灯(放行信号),没有黄灯。用“R”代表红灯,用“G”代表绿灯,从一号信号灯开始依次给出四个信号灯的信号(对于每个信号灯先输出左转信号再输出直行信号),请告诉会长该情况下是否合理,合理指没有两辆或以上的车辆通过路口的行车轨迹会相交或重合。
一行八个字符代表四个信号灯的信号值
输出格式如果合理,请输出"perfect",否则输出"terrible"(不带引号)。
样例 样例输入RGRRRGRR
样例输出
perfect
代码答案(我自己的)
#includeint main() { int cot=0; char a[10]; gets(a); for(int i=0;i<8;i++) if(a[i]=='G') cot++; if(cot==2) { //两个车道面对面直行 if(a[0]=='G'&&a[1]=='G'||a[2]=='G'&&a[3]=='G'||a[4]=='G'&&a[5]=='G'||a[6]=='G'&&a[7]=='G') printf("perfect"); else if(a[1]=='G'&&a[5]=='G'||a[3]=='G'&&a[7]=='G') printf("perfect"); else if(a[0]=='G'&&a[4]=='G'||a[2]=='G'&&a[6]=='G') printf("perfect"); else//一个直行对应一个左转 if(a[1]=='G'&&a[6]=='G'||a[3]=='G'&&a[0]=='G'||a[5]=='G'&&a[2]=='G'||a[7]=='G'&&a[4]=='G') printf("perfect"); else printf("terrible"); } else if(cot==1) //一个绿灯直接通行 printf("perfect"); else if(cot==0)//没有绿灯直接perfect printf("perfect"); else //多余两个就是terrible printf("terrible"); }
这周总的来说对自己的表现还是挺满意的,下周继续加油卷过pz!!!!!



