zju pat 1012 The Best Rank

//题意理解错误,理解成每个学生的A,C,M,E成绩中最好的。
//原题意是所有学生的某课成绩排名中最好的排名来算。

#include <stdio.h>

#include <stdlib.h>
 
typedef struct Node{
    char name[7];
    int grade[3];
    int avr;
    int best;
}Node;


/*int getBest(int a,int b,int c,int avr){
    int best=a;
    if(b>best) best = b;
    if(c> best) best = c;
    if(avr > best) best = avr;
    return best;
}*/
//n=1,2,3,4代表 C,M,E,A
void Mysort(Node *students,int n,int array[],int N){
   int i = 0;
   if(n<4&&n>0){
      while(i<N){
          array[i]=students[i].grade[n-1];
          i++;
       }
   }else{
      while(i<N){
         array[i]=students[i].avr;
          i++;
       }
   }
     i=0;
    int j=0;
    int temp=0;
    int flag = 0;
    while(i<N - 1)   /*外循环控制排序的总趟数*/
    {
        flag = 0;   /*本趟排序开始前,交换标志应为假*/
        j=N-1;
       while(j > i) /*内循环控制一趟排序的进行*/
       {
           if(array[j] < array[j-1] ) /*相邻元素进行比较,若逆序就交换*/
           {
             temp =array[j];
             array[j] = array[j-1];
             array[j-1] = temp;
             flag = 1;                  /*发生了交换,故将交换标志置为真*/
           }
         j--;
       }
        if (flag == 0)  /*本趟排序未发生交换,提前终止算法*/
           break;
        /*
        printf("第%d趟排序结果: \n",i+1);
        PrintArray(array,n);
        */


    i++;
    }
}


int isequ(int a,int b,int c,int avr){
    if(a ==b){
        return 1;
    }if(a==c){
        return 1;
    }if(a==avr){
        return 1;
    }if(b==c){
        return 1;
    }if(b==avr){
        return 1;
    }if(c==avr){
        return 1;
    }
    return 0;
}
int main()
{
    int N,M;
    scanf("%d%d",&N,&M);
    Node *students = (struct Node*)malloc(N*sizeof(Node));
    Node *stupar = (struct Node*)malloc(M*sizeof(Node));
    int i=0;
    while(i<N){
        scanf("%s%d%d%d",students[i].name,&students[i].grade[0],&students[i].grade[1],&students[i].grade[2]);
        students[i].avr = (int)((float)(students[i].grade[0]+students[i].grade[1]+students[i].grade[2])/3+0.5);
       // students[i].best = getBest(students[i].grade[0],students[i].grade[1],students[i].grade[2],students[i].avr);
        i++;
    }
    int j=0;
    while(j<M){
        scanf("%s",stupar[j].name);
        j++;
    }
    j=0;
    int k,m;//
    char flag;
    while(j<M){
        i=0;
        while(i<N){
            if(strcmp(stupar[j].name,students[i].name)==0)
                break;
            i++;
        }
        if(i==N){
          printf("%s\n","N/A");
        }else{


        int A[N],C[N],M[N],E[N];
        Mysort(students,4,A,N);
        k=N-1;
        while(k>=0){
            if(students[i].avr==A[k]){
                m = N-k;
                flag='A';
                break;
            }
            k--;
        }
            Mysort(students,1,C,N);
            k=N-1;
            while(k>=0){
              if(students[i].grade[0]==C[k]){
                if(m>N-k){
                    m = N-k;
                    flag='C';
                }


                break;
              }
              k--;
            }
        Mysort(students,2,M,N);
            k=N-1;
            while(k>=0){
              if(students[i].grade[1]==M[k]){
                if(m>N-k){
                m = N-k;
                flag='M';
                }
                break;
              }
              k--;
            }
             Mysort(students,3,E,N);
            k=N-1;
            while(k>=0){
              if(students[i].grade[2]==E[k]){
               if(m>N-k){
                m = N-k;
                flag='E';
               }
                break;
              }
              k--;
            }




     printf("%d %c\n",m,flag);
        //判断有几个最大,avr拍第几,最好的在第n位
       /* k=2;m=0;n=0;
        while(k>=0){
            if(students[i].best==students[i].grade[k]){
                n=k;
            }
            if(students[i].avr>=students[i].grade[k])
                m++;//m拍在4-m
            k--;
        }
        if(students[i].best==students[i].avr){
            n=3;
        }


         if(isequ(students[i].grade[0],students[i].grade[1],students[i].grade[2],students[i].avr)==1){
           printf("%d %c\n",4-m,'A');
         }
          else if(n==0){
              printf("%d %c\n",1,'C');
          }else if(n==1){
              printf("%d %c\n",1,'M');
          }
          else if(n==2){
              printf("%d %c\n",1,'E');
          }else if(n==3){
              printf("%d %c\n",1,'A');
          }*/
      }
      j++;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ZJU-I型机械臂是一种由浙江大学机器人研究所开发的六自由度机械臂,具有高速、精度和可靠性等特点。机械臂的运动控制是机器人中的重要研究领域之一,其中点到点轨迹规划是机器人在运动过程中最基础和常用的一种方式,也是机械臂控制的核心问题之一。 点到点轨迹规划的目标是通过给定的起点和终点,计算出机械臂的运动轨迹,使机械臂在运动过程中满足机械臂轨迹的连续性、平滑性、可控性等要求。在过去的研究中,经典的点到点轨迹规划方法包括插值法、线性规划法、最小能量法等。 如果使用Python实现机械臂的点到点轨迹规划,可以采用Robotics Toolkit(简称robot)这个模块。robot模块提供了各种从轨迹规划、控制到仿真的功能,可用于ROS、Vrep、Webots等机器人仿真软件。使用robot模块,可以通过几行代码实现机械臂的点到点轨迹规划,例如: ``` from roboticstoolkit import robot from roboticstoolkit.robots import zju # 初始化机器人 zju_arm = robot.Robot('zju', zju.URDF) # 设定起点和终点 start = [0, 0, 0, 0, 0, 0] goal = [0, 1, 1, 0.5, 0, 0] # 计算机械臂的轨迹 path = zju_arm.get_trajectory(start, goal) # 控制机械臂运动到终点 zju_arm.move_to(goal) ``` 其中,`roboticstoolkit`和`roboticstoolkit.robots`都是导入的Python模块,`zju`是机械臂的URDF定义文件,`start`和`goal`是起点和终点的坐标,`get_trajectory()`函数会返回计算得到的机械臂轨迹,`move_to()`函数则控制机械臂运动到终点。 总之,使用Python实现ZJU-I型机械臂的点到点轨迹规划相对简单,只需要导入相应的模块,并根据需要设置机械臂的各种参数,即可轻松实现机械臂的控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值