https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040
开始:
把所有成绩都存进数组,需要查找的成绩存进数组,然后去匹配
寻找,找到则相应的个数加一。方法太low,双层for循环超时。
时间复杂度在n*n
看了题解:
成绩是在一个范围内的,创建一个101的数组,每读取一个成绩,
相应的下标对应的值就加一,这样在读取的时候就完成了数据的统计,
最后想要那个数出现的次数,直接输出对应的数组值就可以,时间
复杂度顿时降到了-1
贴代码:
//#include<bits/stdc++.h>
//using namespace std;
//int main()
//{
// int n;
// scanf("%d",&n);
// int a[n]={0};
// for(int i=0;i<n;i++)
// {
// scanf("%d",&a[i]);
// }
// int m;//需要输出的人数
// scanf("%d",&m);
// int sorce[m];
//
// for(int i=0;i<m;i++)
// {
// scanf("%d",&sorce[i]);
// }
// //双层for循环遍历的去找 超时了
//
//
// int endshuchu[m]={0};
// for(int i=0;i<m;i++)
// {
// for(int j=0;j<n;j++)
// {
// if(sorce[i]==a[j])
// endshuchu[i]++;
// }
// }
//
// for(int i=0;i<m;i++)
// {
// printf("%d",endshuchu[i]);
// if(i!=m-1)
// printf(" ");
// }
//
//}
//上面的思路是把成绩放到一个数组当中,然后每次都要遍历的去找
//改进:设置数组,大小101能包含所有成绩的情况,没添加一个成绩就给数组加一,
//最后输出的时候根据 所需要的数据输出就可以了
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int a[101]={0};
for(int i=0;i<n;i++)
{
int temp;
scanf("%d",&temp);
a[temp]++;
}
int m;//需要输出的人数
scanf("%d",&m);
for(int i=0;i<m;i++)
{
int temp1;
scanf("%d",&temp1);
printf("%d",a[temp1]);
if(i!=m-1)
{
printf(" ");
}
}
}
PAT乙级1038—统计同成绩学生
最新推荐文章于 2023-11-01 20:12:10 发布