正常思维:使用return 语句,但每调用一次函数 return 语句只能返回一个值 。这是C语言语法规则。
该怎么实现一个函数返回两个值或是多个值?,可以采用“间接方法”。大概有三种方法:全局变量法、变量指针法、结构体指针法等。
1. 全局变量法
全局变量法,顾名思义,将需要的变量X设为全局变量 ,在调用应用函数后,X 被附上值 ,可以直接使用X变量值。
代码分析:(编程之美 小飞 电梯调度算法)
// 全局变量法 :返回多个值
//但毕竟全局变量应用过程中有很多危险,要慎重使用。
#include<stdio.h>
/* 问题描述*/
/**
* 编程之美 小飞 电梯调度算法
* 在繁忙的时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。
* 所有乘客都从一楼上电梯,到达某层楼后,电梯听下来,所有乘客再从这里爬楼梯到自己的目的层。
* 在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。
* 问:电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少?
思路:当电梯停靠在第i层时,乘客所要爬的总的楼梯数为Y.
假设有N1个乘客要到达的层数<i,有N2个乘客要到达的层数==i,有N3个乘客要到达的层数>i.
所以有:
(1)当电梯改停在i-1,则 Y+(N2+N3-N1)
(2)当电梯改停在i+1,则 Y+(N1+N2-N3)
所以当后面那部分的值<0时(如(2)的N1+N2<N3),则加上负数后总的楼梯数比原来的小,即更优解.
因此,我们可以从第一层开始,用以上策略,考察N1,N2,N3的值,依次调整以得到最优解.
*/
int targartfloor;
int sumstars;
void getMinFloors(int N ,int * nperson)
{
//int nperson[i] // 到达i层下的总人数
//int targartfloor;
//int sumstars;
int N1;