作者:feilengcui008
链接:http:
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
#include <stdio.h>
int max(const int &a, const int &b){
return a>b ? a : b;
}
int min(const int &a, const int &b){
return a>b ? b : a;
}
void mball_nfloor(int m, int m);
int main(int argc, char **argv){
fprintf(stdout, "\n**********************mball_nfloor(4, 100)************************\n");
mball_nfloor(4, 100);
fprintf(stdout,
"\n******************************************************************\n");
fprintf(stdout, "\n**********************mball_nfloor(1, 100)************************\n");
mball_nfloor(1, 200);
fprintf(stdout,
"\n******************************************************************\n");
fprintf(stdout, "\n**********************mball_nfloor(4, 1)**************************\n");
mball_nfloor(4, 1);
fprintf(stdout, "\n******************************************************************\n"); return 0;
}
void mball_nfloor(int m, int n){
if(m<=0 || n<=0)
return;
int result[m+1][n+1];
int temp_min = n+1;
int temp_max = 0;
for(int i=0;i<=m;i++){
result[i][0] = 0;
result[i][1] = 1;
}
for(int i=0;i<=n;i++){
result[1][i] = i;
result[0][i] = 0;
}
if(m>1 && n>1){
for(int a=2;a<=m;a++){
for(int i=1;i<=n;i++){
for(int k=1;k<=i;k++){
temp_max = max(result[a-1][k-1]+1, result[a][i-k]+1);
temp_min = min(temp_min, temp_max);
}
result[a][i] = temp_min;
temp_min = n+1;
}
}
}
for(int i=1;i<=m;i++){
fprintf(stdout, "\n======%d个球,%d层,每种楼层各种丢球方法中最坏情况下的最少丢球次数======\n", i, n);
for(int j=1;j<=n;j++){
fprintf(stdout, "%d\t", result[i][j]);
}
fprintf(stdout, "\n");
}
}