using System;publicclassKata{publicstaticdoubleFindNumber(Func<double,int> compare){double p =50.0, ma =100.0, mi =0.0, d =100.0;while((ma-mi)>0.00002){int r =compare(p);if(r<0){
mi = p;
p =(p + ma)/2;}elseif(r>0){
ma = p;
p =(p + mi)/2;}else{return(p);}}return(p);}}
答案2:
using System;publicclassKata{publicstaticdoubleFindNumber(Func<double,int> compare){double a =50.0;while(true){if(compare(a)==-1){
a +=0.00001;if(compare(a)==1)break;}elseif(compare(a)==1){
a -=0.00001;if(compare(a)==-1)break;}elsebreak;}return a;}}
答案3:
using System;publicclassKata{protectedstaticdouble GetMidle (double max,double min){return(max + min)/2;}publicstaticdoubleFindNumber(Func<double,int> compare){double max =100;double min =0;double epsilo =0.000001;double count =GetMidle(max, min);double last_count =0;while(compare(count)!=0){if(compare(count)>0){ max = count;}if(compare(count)<0){ min = count;}
last_count = count;
count =GetMidle(max, min);if(System.Math.Abs(count - last_count)< epsilo){break;}}return count;}}
答案4:
using System;publicclassKata{publicstaticdoubleFindNumber( Func<double,int> compare ){double n =0;while(true){if(compare( n )==0){return n;}if(compare( n )==-1){
n +=1;}else{
n -=1;break;}}var d =0.5;do{
n += d;if(compare( n )==0){return n;}if(compare( n )==1){
n -= d;}
d /=2;}while(true);}}
答案5:
using System;publicclassKata{publicstaticdoubleFindNumber(Func<double,int> compare){double intervalStart =0.0;double intervalEnd =100.0;double half =(intervalEnd + intervalStart)/2.0;int result =compare(half);while(result !=0){if(result >0)
intervalEnd = half;else
intervalStart = half;
half =(intervalEnd + intervalStart)/2.0;
result =compare(half);}return half;}}
答案6:
using System;publicclassKata{publicstaticdoubleFindNumber(Func<double,int> compare,double min =0,double max =100){var guess = Math.Round((min + max)/2,5);var comp =compare(guess);if(comp ==0|| max-min <.00002)return guess;elseif(comp ==-1)returnFindNumber(compare, guess, max);elsereturnFindNumber(compare, min, guess);}}
using System;publicclassKata{publicstaticdoubleFindNumber(Func<double,int> compare){var begin =0d;var end =100d;while(true){var m =(end + begin)/2;if(end - begin <=0.00002)return m;var r =compare(m);if(r <0) begin = m;if(r >0) end = m;if(r ==0)return m;}}}
using System;publicclassKata{publicstaticdoubleFindNumber(Func<double,int> compare){double max =100;double min =0;int compareResult =0;double attempt =0;do{
attempt = min +(max - min)/2;
compareResult =compare(attempt);if(compareResult <0)
min = attempt;elseif(compareResult >0)
max = attempt;}while(compareResult !=0);return attempt;}}