主题
最后登录1970-1-1
回帖0
精华
积分1735
威望
RP
金钱 柯币
人气 ℃
注册时间2003-10-14
|
发表于 2006-4-23 13:23:44
|
显示全部楼层
回复: [纪念+灌水]4.16来加一年/在加摄影
[QUOTE=shaodog]第一反应这个有点像数据结构的题。。。。。。。。。用程序解决时最方面最快的
咱先去编个程序算出答案,在找个合理的数学模型来解释 %&205[/QUOTE]
编完了
- #include<iostream.h>
- #define N 25 //楼层数
- #define ladder 15 //阶梯数
- int max(int a, int b)
- {
- if(a>=b)
- return a;
- else
- return b;
- }
- int min(int a, int b)
- {
- if(a>=b)
- return b;
- else
- return a;
- }
- int floor(int n,int m)
- {
- if(m>=n)
- return (m-n)*ladder;
- else
- return (min((n-m),(m-1)))*ladder;
- }
- void main()
- {
- int n,m; //n为电梯停的楼层数(最小为1,最大25),m为要到达的楼层数
- int step[N][N+1]; //电梯停在第n层最多要走的阶梯数
- int min_step=(N+1)*ladder,min_n=1; //最终结果&initial
- int same_n[N];
- int same_step,i=0,count=0;
- for(n=1;n<=N;n++)
- {
- cout<<"电梯所停楼层数为"<<n<<" "<<"以下依次为到达1-25所需要走的阶梯数"<<endl;
- //initial
- step[n-1][N]=0;
- for(m=1;m<=N;m++)
- {
- step[n-1][m-1]=floor(n,m);
- cout<<step[n-1][m-1]<<" ";
- // cout<<n<<" "<<m<<endl;
- step[n-1][N]=max(step[n-1][N],step[n-1][m-1]);
- }
- cout<<endl<<endl;
- }
- for(n=1;n<=N;n++)
- {
- if(step[n-1][N]==min_step)
- {
- same_n[i+1]=n;
- i++;
- count=i;
- same_step=min_step;
- // cout<<same_n[i]<<endl;
- }
- else
- {
- min_step=min(step[n-1][N],min_step);
- if(min_step==step[n-1][N])
- {
- min_n=n;
- count=0;
- i=0;
- same_n[i]=n;
- }
- }
- }
- if(min_step==same_step)
- {
- cout<<"电梯应该停在";
- for(i=0;i<=count;i++)
- {
- cout<<same_n[i]<<"层 ";
- }
- cout<<" "<<"最多需要走的台阶数为"<<min_step<<endl;
- }
- else
- {
- cout<<endl<<"电梯应该停在"<<min_n<<"层 "<<"最多需要走的台阶数为"<<min_step<<endl;
- }
- }
复制代码
运行一下附件的程序就得到答案了(最好到MS-DOS命令行下调用,附件里有的) |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|