#include<stdio.h>
#include<stdlib.h>//包含快速排序的頭文件
#include<math.h>//數(shù)學(xué)函數(shù)頭文件
double length(double r)//將R轉(zhuǎn)換成有效值
{
return 2 * sqrt((double)(r * r - 1)); 此處不理解 請(qǐng)大神解釋 為什么要減1
}
int com(const void *a,const void *b)//快速排序比較函數(shù)
{
return (*(double *)b - *(double *)a > 0 ? 1 : -1);//從大到小排序
}
int main()
{
int m,n,i,j = 0;//j統(tǒng)計(jì)滿足>1的裝置個(gè)數(shù)
double r[1020],temp,sum=0.0;//存儲(chǔ)每個(gè)滿足條件的可濕潤(rùn)范圍
scanf("%d",&m);
while(m--)
{
scanf("%d",&n);
for(i = 0,j = 0; i < n; i ++)
{
scanf("%lf",&temp);
if(temp > 1) //因?yàn)椴萜旱膶挾葹?米 所以舍棄半徑小于等于1的裝置
r[j++] = length(temp);
}
qsort(r,j,sizeof(r[0]),com); //qsort排序函數(shù):r為要排序的數(shù)組、j為要排序的數(shù)組的長(zhǎng)度、sizeif(r[0])為數(shù)組元素的大?。ㄒ粋€(gè)字節(jié)為單位)
//com為上面定義的判斷大小函數(shù)的指針,需要自己定義
//for(i = 0; i < j; i ++)測(cè)試用
// printf("%.2f ",r[i]);
for(i = 0,sum = 0;i < j; i ++){
sum += r[i]; //sum存儲(chǔ)裝置所能濕潤(rùn)的長(zhǎng)度
if(sum >= 20) //如果sum大于或等于20,說(shuō)明已經(jīng)濕潤(rùn)完畢
break;
}
printf("%d\n",i + 1);
//輸出時(shí)加1,對(duì)應(yīng)和i的關(guān)系,假如i=0是即退出循環(huán),說(shuō)明1個(gè)裝置即可完成任務(wù),此時(shí)可以看出需要裝置個(gè)數(shù)和i之間的關(guān)系
}
system("pause");
return 0;
}
- 1 回答
- 0 關(guān)注
- 1019 瀏覽
添加回答
舉報(bào)
0/150
提交
取消