标签:
一、问题描述
•石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停。信1201-1班的张一东觉得在每层都停觉得不耐烦。
1 #include "stdafx.h" 2 #include <stdio.h> 3 #define HIGH 6 4 #define N 15 5 void scan(int Input[],int floor[],int num) //用户输入所要到达的楼层 6 { 7 int i; 8 do 9 { 10 printf("请输入进入电梯的人数(最多15人):"); 11 scanf("%d",&num); 12 if(num>15) 13 printf("您的输入有误!\n"); 14 }while(num>15); 15 printf("请输入每个人到达的楼层:"); 16 for(i = 0;i<num;i++) 17 { 18 scanf("%d",&Input[i]); 19 } 20 for(i=0;i<num;i++) //对输入的楼层进行计算 21 { 22 switch(Input[i]) 23 { 24 case 1: 25 floor[Input[i]] = floor[Input[i]]+1; 26 break; 27 case 2: 28 floor[Input[i]] = floor[Input[i]]+1; 29 break; 30 case 3: 31 floor[Input[i]] = floor[Input[i]]+1; 32 break; 33 case 4: 34 floor[Input[i]] = floor[Input[i]]+1; 35 break; 36 case 5: 37 floor[Input[i]] = floor[Input[i]]+1; 38 break; 39 case 6: 40 floor[Input[i]] = floor[Input[i]]+1; 41 break; 42 default: 43 printf("楼层不对!"); 44 break; 45 } 46 } 47 } 48 void count(int sum[],int floor[]) //对到达每层时要走的楼层总数计算 49 { 50 int i,j; 51 for(i=1;i<HIGH+1;i++) 52 { 53 for(j = 1;j<HIGH+1;j++) 54 { 55 if(j<=i) 56 sum[i] = sum[i]+floor[j]*(i-j); 57 else 58 sum[i] = sum[i]+floor[j]*(j-i); 59 } 60 } 61 } 62 void Min(int sum[]) //求出最小的值,并输出楼层 63 { 64 int min,sign; 65 min = sum[1]; 66 sign = 1; //用以标记最小值所在的楼层 67 for(int i=1;i<HIGH+1;i++) 68 { 69 if(sum[i]<min) 70 { 71 min = sum[i]; 72 sign = i; 73 } 74 } 75 printf("最少所走的总层数为%d,在第%d层。\n",min,sign); 76 77 } 78 int main(int argc, char* argv[]) 79 { 80 int num; //电梯内的人数 81 int floor[HIGH+1]={0,0,0,0,0,0,0}; //用于存放到达每层楼的人数,初始每层楼的人数是0 82 int Input[N]; //用于存放到用户输入的楼层 83 int sum[HIGH+1]={0,0,0,0,0,0,0}; 84 for(int i=0;i<0;i++) 85 { 86 Input[i] = 0; //初始化输入的为零 87 } 88 scan(Input,floor,num); 89 count(sum,floor); 90 Min(sum); 91 return 0; 92 }
四、运行结果
五、总结
该代码中采取的是求出每个楼层停的时候的路径长度,并求其最短长度,方法较为简单,没有什么技巧,不过实现起来比较容易。
标签:
原文地址:http://www.cnblogs.com/KaliLinux/p/4442734.html