第一题 写一个函数 set_same(int a[],int len1,int b[],int len2) 判断数组a和b所含元素是否都相同,就是说,如果把a和b所含元素按成两个集合 判断是两个集合是否相等 既然是集合 那就不考虑重复元素和顺序了
#include<stdio.h>
#include<string.h>#include<math.h>
#include<malloc.h>
int set_name(int a[],int len1,int b[],int len2){
int i,j;
int flag1=0,flag2=0;
for(i=0;i<len1;i++){
for(j=0;j<len2;j++){
if(a[i] == b[j]){
flag1++;
break;
}
}
}
for(i=0;i<len2;i++){
for(j=0;j<len1;j++){
if(b[i] == a[j]){
flag2++;
break;
}
}
}
if(flag1 == len1 && flag2 == len2) return 1;
else return 0;
}
int main(){
int n,m;
int i,j;
scanf("%d %d",&n,&m);
int* a = (int *)malloc(sizeof(int)* n);
int* b = (int *)malloc(sizeof(int) * m);
for(i=0;i<n;i++){
scanf("%d",a+i);
}
for(i=0;i<m;i++){
scanf("%d",b+i);
}
int s = set_name(a,n,b,m);
if(s) printf("YES\n");
else printf("NO\n");
return 0;
}
第二题
用结构体,c++用sort对成绩排序即可。
#include<stdio.h>
#include<malloc.h>
#include<algorithm>
using namespace std;
typedef struct student{
char name[100];
double grade;
bool operator < (const student & a) const{
return grade > a.grade;
}
}student;
int main(){
int n;
int i;
scanf("%d",&n);
student stu[100];
for(i=0;i<n;i++){
scanf("%s %llf",stu[i].name,&stu[i].grade);
}
sort(stu,stu+n);
for(i=0;i<n;i++){
printf("%s %.2llf\n",stu[i].name,stu[i].grade);
}
return 0;
}