나는 C를 배웠고 this challenge을 해결하고 있는데, uva 플랫폼에 이것을 제출할 계획이 아닙니다.이 운동을 코딩하는 이유는 기울기 때문입니다. 문제에 대한 최선의 접근 방식이지만 노력 중입니다.QSort를 정의 구조체와 함께 사용
4
3
20 30 40 50 30 40
Res: 2
4
20 30 10 10 30 20 40 50
Res: 4
3
10 30 20 20 30 10
Res: 2
4
10 10 20 30 40 50 39 51
Res: 3
각 입력 테스트에서 답변을 잘못하고 나는 이유는 qsort가 기능이라고 생각 :
내 터미널에서 인쇄 입력은 다음과 같다. 구조체를 사용하여 qsort 함수를 사용하는 방법에 대해 혼란 스럽다. array라고하는 구조체를 호출하고 sizeof (int)를 사용하여 입력 한 다음 크기를 사용하지만 int 또는 sizeof my를 사용해야합니다. 구조, 마지막으로 나는 비교 함수를 호출하고있다. 내 코드는 다음과 같습니다
#include <stdio.h>
#include <string.h>
struct Dolls{
int w;
int h;
}array[20005];
int cmp(struct Dolls a, struct Dolls b){
if(a.w==b.w){
return a.h < b.h;
}else{
return a.w > b.w;
}
}
int arr[20005];
int dp[20005];
int n;
int bSearch(int num, int k){
int low=1;
int high = k;
int mid;
while(low<= high){
mid = (low+high)/2;
if(num>=dp[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
return low;
}
int res_dolls(){
int k=1;
int i,pos;
dp[i]=arr[1];
for(i=2;i<=n;i++){
if(arr[i]>=dp[k]){
dp[++k] = arr[i];
}else{
pos = bSearch(arr[i],k);
dp[pos] = arr[i];
}
}
return k;
}
int main(){
int t,j;
scanf("%d",&t);
while(t--){
memset(array,0,sizeof(array));
scanf("%d",&n);
for(j=1;j<=n;j++){
scanf("%d %d",&array[j].w, &array[j].h);
}
qsort(array,n,sizeof(int),cmp);
for(j=1;j<=n;j++){
arr[j] = array[j].h;
}
printf("%d\n",res_dolls());
}
return 0;
}
당신이'#include'을 잊어 버린 것을 잊었습니다. 컴파일러 경고를 최대화하십시오. –