다음 소스에서 qosrt를 뺏을때 값이 차이가 나는 이유
민서
질문 제목 : 다음 소스에서 qosrt를 뺏을때 값이 차이가 나는 이유
qsort를 빼면 최종값이 42로 출력되고요 넣으면 최종값이 53.6으로 출력이 됩니다. 이게 어떤 차이가 있는 건가요?
질문 내용 : 밑에 소스는 제가 과제로 찾아낸 소스인데요. 여기서 qsort를 빼면 위에 요약 부분에 적은 것처럼 값이 넣었을때와 다르게 나옵니다. 이게 어떤 차이가 나서 이런 결과가 나오는 건가요? 혹시 퀵소트의 장점과 관련이 있는 건가요? 아시는분 답글 달아주십시오. 급합니다.
#include stdio.h
#include stdlib.h
typedef struct item
{
int hour;
int value;
}item;
int compare(const void *x, const void *y)
{
item *i1 = (item *)x, *i2 = (item *)y;
double ratio1 = (*i1).value*1.0 / (*i1).hour;
double ratio2 = (*i2).value*1.0 / (*i2).hour;
if(ratio1 ratio2)
return 1;
else if(ratio1 ratio2)
return -1;
else
return 0;
}
int main()
{
int items;
printf(오늘의 목표 숙제 잠 공부 간식 게임 운동 밥.);
printf(오늘 할 계획의 수를 입력하세요. : );
scanf(%d,&items);
item *i=(item*)malloc(sizeof(item)*items);
int iter;
for(iter=0;iteritems;iter++)
{
printf(순서대로 시간과 그것의 가치를 적으시오. : );
scanf(%d%d,&i[iter].hour,&i[iter].value);
}
qsort(i,items,sizeof(item),compare);
int maxhour;
printf(오늘 할 최대의 시간은? : );
scanf(%d,&maxhour);
double value = 0.0;
int presenthour = 0;
for(iter=0;iteritems;iter++)
{
if(presenthour + i[iter].hour maxhour)
{
presenthour = presenthour + i[iter].hour;
value += i[iter].value;
}
else
{
int remaining = maxhour - presenthour;
value += i[iter].value*remaining *1.0/i[iter].hour;
break;
}
}
printf(계산을 해서 12시간 동안 달성할수 있는 최대 값은 %.6lf 이다.\n,value);
}