- #include <stdio.h>
- #include <algorithm>
- #include <vector>
- using namespace std;
- struct T
- {
- int id;
- double v;
- };
- bool cmp(const T &a, const T &b)
- {
- if(a.v>b.v)
- return true;
- else if(a.v<b.v)
- return false;
- else
- return a.id<b.id;
- }
- int main(void)
- {
- int n,m;
- bool first = true;
- while(scanf("%d", &n)==1 && n)
- {
- scanf("%d", &m);
- int f[85] = {0};
- int g[85] = {0};
- int i,j,k;
- for(i=1; i<=m; ++i)
- f[i] = 1;
- for(i=1; i<n; ++i)
- {
- for(j=0; j<=80; ++j)
- g[j] = 0;
- for(j=1; j<=80; ++j)
- {
- for(k=1; k<=m; ++k)
- {
- if(j-k>0)
- {
- g[j] += f[j-k];
- }
- }
- }
- for(j=0; j<=80; ++j)
- f[j] = g[j];
- }
- int sum = 0;
- vector<T> ans;
- T t;
- for(i=1; i<=80; ++i)
- {
- if(f[i] > 0)
- {
- sum += f[i];
- t.id = i;
- t.v = f[i];
- ans.push_back(t);
- }
- }
- for(i=0; i<ans.size(); ++i)
- {
- ans[i].v = ((int)(100.0*ans[i].v/sum+0.5))/100.0;
- }
- sort(ans.begin(), ans.end(), cmp);
- if(first)
- first = false;
- else
- printf("\\n");
- for(i=0; i<3; i++)
- {
- printf("%d %.2lf\\n", ans[i].id, ans[i].v);
- }
- }
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/050720134471.html
来源: http://www.codesnippet.cn/detail/050720134471.html