样例输入#
2
2
1 1
3
1 3 3
样例输出#
2
1
样例解释#
第一个样例,因为小明本人肯定在聚会,所以都会去;
第二个样例,第1个人会去,后面两个人因为要至少三个人,所以只有小明和第一个人会去。
思路:数组从小到大排序,i从1开始 ai>i不满足
排序问题
1、利用qsort函数 头文件为stdlib.h
#include<stdio.h>
#include<stdlib.h>
#define N 10005
int cmp(const void *a,const void *b){
return *(int*)a-*(int*)b;
}
int main(){
int T;
scanf("%d",&T);
int a[N]={};
while(T--){
int i,n,cnt=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
qsort(a,n,sizeof(a[0]),cmp);
for(i=1;i<=n;i++){
if(a[i]>i)break;
cnt++;
}
printf("%d\n",cnt);
}
}
2、快排
#include<stdio.h>
#define N 10005
void Qsort(int a[],int left,int right){
if(left<right){
int i=left,j=right,base=a[left],t;
//从小到大排序
while(i<j){
while(a[j]>=base&&i<j){
j--;
}
while(a[i]<=base&&i<j){
i++;
}
if(i<j){
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=base;
Qsort(a,left,i-1);
Qsort(a,i+1,right);
}
}
int main(){
int T;
scanf("%d",&T);
int a[N]={};
while(T--){
int i,n,cnt=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
Qsort(a,1,n);
for(i=1;i<=n;i++){
if(a[i]>i)break;
cnt++;
}
printf("%d\n",cnt);
}
}