2018.01.07
1.奖学金
1 #include <stdio.h> 2 #include <math.h> 3 #include <string.h> 4 int grade[500][3]; 5 int main(){ 6 freopen("scholar.in","r",stdin); 7 freopen("scholar.out","w",stdout); 8 int n; 9 int i,j; 10 scanf("%d",&n); 11 for(i=1;i<=n;i++){ 12 grade[i][0]=i; 13 int b,c; 14 scanf("%d%d%d",&grade[i][1],&b,&c); 15 grade[i][2]=grade[i][1]+b+c; 16 } 17 /*排序*/ 18 int t; 19 for(i=1;i<n;i++){ 20 int max=i; 21 for(j=i+1;j<=n;j++){ 22 if(grade[max][2]<grade[j][2]) 23 max=j; 24 else if(grade[max][2]==grade[j][2]){ 25 if(grade[max][1]<grade[j][1]) 26 max=j; 27 else if(grade[max][1]==grade[j][1]&&grade[max][0]>grade[j][0]) 28 max=j; 29 } 30 } 31 if(max!=i){ 32 t=grade[max][0];grade[max][0]=grade[i][0];grade[i][0]=t; 33 t=grade[max][1];grade[max][1]=grade[i][1];grade[i][1]=t; 34 t=grade[max][2];grade[max][2]=grade[i][2];grade[i][2]=t; 35 } 36 } 37 for(i=1;i<=5;i++) 38 printf("%d %d ",grade[i][0],grade[i][2]); 39 return 0; 40 }
状态:AC
2.纪念品分组
1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 using namespace std; 7 int book[30001],w; 8 int numb[30001]; 9 int n,yhb=0; 10 int main(){ 11 freopen("group.in","r",stdin); 12 freopen("group.out","w",stdout); 13 scanf("%d%d",&w,&n); 14 int i,j; 15 for(i=0;i<n;i++){ 16 scanf("%d",&numb[i]); 17 book[i]=1; 18 } 19 sort(numb,numb+n); 20 for(i=n-1;i>=0;i--){ 21 int sum; 22 sum=w; 23 if(book[i]==1){ 24 yhb++; 25 book[i]=0; 26 for(j=i-1;j>=0;j--){ 27 if(book[j]==1&&sum>=numb[i]+numb[j]){ 28 book[j]=0; 29 break; 30 } 31 } 32 } 33 } 34 printf("%d ",yhb); 35 return 0; 36 }
状态:AC
3.守望者的逃离
1 #include <stdio.h> 2 #include <math.h> 3 #include <string.h> 4 int magic,time,S; 5 int _Max(int x,int y){return x>y?x:y;} 6 int main(){ 7 freopen("escape.in","r",stdin); 8 freopen("escape.out","w",stdout); 9 scanf("%d%d%d",&magic,&S,&time); 10 int i,j; 11 int walk=0,flash=0; 12 for(i=1;i<=time;i++){ 13 walk+=17; 14 if(magic>=10){ 15 magic-=10; 16 flash+=60; 17 } 18 else magic+=4; 19 walk=_Max(walk,flash); 20 if(walk>=S){ 21 printf("Yes %d",i); 22 return 0; 23 } 24 } 25 printf("No %d",walk); 26 return 0; 27 }
状态:AC
4.hanoi双塔问题
1 #include <stdio.h> 2 #include <math.h> 3 #include <string.h> 4 int noi[1001],wei; 5 int main(){ 6 freopen("hanoi.in","r",stdin); 7 freopen("hanoi.out","w",stdout); 8 int n; 9 scanf("%d",&n); 10 for(int i=1;i<=1000;i++)noi[i]=0; 11 noi[1000]=1; 12 for(int i=1;i<=n+1;i++){ 13 if(i==n+1){ 14 noi[1000]-=1; 15 for(int j=1000;j>=1;j--) 16 if(noi[j]<0){ 17 noi[j]+=10;noi[j-1]-=1;} 18 } 19 for(int j=1;j<=1000;j++)noi[j]*=2; 20 for(int j=1000;j>=1;j--) 21 if(noi[j]>=10){ 22 noi[j]-=10;noi[j-1]++;} 23 } 24 for(int i=1000;i>=1;i--) 25 if(noi[i]!=0)wei=i; 26 for(int i=wei;i<=1000;i++) 27 printf("%d",noi[i]); 28 return 0; 29 }
状态:AC
P.S. 今天又学习了sort函数的一种新操作:sort ( a , a + n , cmp )。cmp是你自己定义的一个函数,在里面可以重新定义sort函数的比较规则,比如从大到小,排序结构体等。
反思
对于这次考试,发挥的不是很好。这四道题考查了动态规划之前的除搜索以外所有的基础算法,是一套比较全面的综合题。从考试的情况来看,成绩并不理想,400分只有290分。袁老师说他本来以为我可以上300分的。既然没有达到预期的效果,那么就要反思:
1.第一题。
2.第二题。
3.第三题。
4.第四题。