程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 4153(數學)

hdu 4153(數學)

編輯:C++入門知識


  1x1+2/3+3/5+1/3x1/5+0x1/5+0.01可以看成為:3/3x5/5+2/3+3/5+1/3x1/5+0/3x1/5+0.01。 這樣看起來更有規律,在兩個分數乘積的中,一個分母是3,另外一個是5。先說為什麼是5,從左邊的圖片可以看出在0-9范圍的值最大,就是5。10-19中為3,而3又占5中的3/5。20-29中為1,1占5中的1/5,30-39為1,也占1/5。所以以為什麼以5分母的分數就可以求出來了。再說3。。。3/3,2/3,1/3,0,/3正好分別對應0-9,10-19,20-29,30-39。3是由測試數據裡面的最大數30除以圖像的間距0-9這10個數等於3,因此確定了3是分母,分子再逐級遞減。最後在最後的結果上面加上0.01,保留6位小數,就是最終的結果了。   [cpp]  #include"stdio.h"   #include"string.h"   int main()   {       int n,m;       int i;       int a[101];       int mark[101];       int s1,s2;       int max;       while(scanf("%d%d",&n,&m)!=-1,n||m)       {           memset(mark,0,sizeof(mark));           max=0;           for(i=0;i<n;i++)           {               scanf("%d",&a[i]);               mark[a[i]/m]++;               if(max<a[i])max=a[i];//輸入的數中最大的數           }           s2=max/m;//s2表示可以分的份數。。。           //s2++;              max=0;           for(i=0;i<=s2;i++)           {               if(mark[i]>max)//占份數最多。。                   max=mark[i];           }           s1=max;                 double ans;           ans=0.01;           for(i=0;i<=s2;i++)           {               ans+=(i*1.0/s2)*(mark[s2-i]*1.0/s1);           }           printf("%.6f\n",ans);       }       return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved