C言語の問題パイ(半分)

今夜私は自閉症を行い、そしてWAの問題となっている
道路の脱毛に行って。
私も考え方を行います。(隋Suinian隋Suinian)
トピックリンク:パイ-1969 HDUは、
ここに画像を挿入説明
一般的に意味し、あなたが最もボリュームを行うには、Fの友人と私の間で均等に分割するパイのN個を持っていること。
ここでは使用することができるの半分をそれ!

あなたはその条件が満たされているよりも小さい示す中間値の条件を満たしている場合は、この時点でなっ下限中間値、中間値は、それが満たされない条件よりも大きくなっていることを示す、条件を満たさないとき、ので、この時間は、上限は中間の値になります。

タイトルは半径を送信するために入力されているので、私たちは(面積ボリューム高さ1)ボリュームに変換する必要があります。

だから、中間値を決定するためにどのようにそれの条件を満たしていますか?
各番号は、[追加の数は、この時点で共有の総数は自分の友人(すなわち、F + 1)の数よりも大きくてもよいかどうかを比較し、点(Jipaiが丸められた中間値で割った領域)まで送るように決定されます値が中間条件が満たされているよりも大きい場合には、その逆に低い値、および副を変更します。

PIは、出力の精度によって改善することができることに留意されたいです。PI = ACOS(-1)。

カンカンは、来る私の心のうちコード

#include<stdio.h>
#include<math.h>
#define PI acos(-1)
#define EPS 1e-6
int main()
{
	int m;
	scanf("%d",&m);
	while(m--)
	{
		int n,i,f,r;
		double s[10000],mid,low=0,high=0;
		scanf("%d %d",&n,&f);
		for(i=0;i<n;i++)
		{
			scanf("%d",&r);
			s[i]=PI*r*r;
			if(high<s[i]) high=s[i];
		}
		while(high-low>=EPS)
		{
			mid=(low+high)/2;
			int sum=0;
			for(i=0;i<n;i++)
			{	
				sum+=(int)(s[i]/mid);
			}
			if(sum>=f+1) low=mid;
			else high=mid;
		}
		printf("%.4f\n",low);
	}
	return 0;
 } 

何度もそのような事、I WAには、この時点で合計+ =(int型)(S [I] /ミッド)ので、私は(int)を入れていない!!!私はなぜ変換のためのシステムを強化していないかわからない以上ですいや、多分今私の心は、訓練を受け、訓練を受け、訓練を受け、明確ではありません。

公開された22元の記事 ウォンの賞賛1 ビュー1056

おすすめ

転載: blog.csdn.net/Doro_/article/details/104058121