[指针] 从二维数组中选出女兵冠军和亚军的身高

 girls[4][3] :保存着女兵方队的身高,我们需要将身高最高和次高的找出来,也就是冠军和亚军.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
	int girls[4][3] = {
		{161,158,166},
		{168,155,171},
		{163,164,165},
		{163,164,165}
	};

/*
int* qishou[2];定义一个指针,用下标0和1代表冠军和亚军,而且,指针也可以为将来扩展,比如,需要比10个身高,20个身高,我们只需要改下标数就可以了,int *qishou[20].
*/
	
	int* qishou[2];

/*
girls[0][0] 和 girls[0][1] 单独比较,先假定出冠军和亚军,通过指针qishou[0]和qishou[1]来保存数组元素的地址,有了地址就得到值了.
*/

	if (girls[0][0] > girls[0][1]) {
		qishou[0] = &girls[0][0];
		qishou[1] = &girls[0][1];
	}
	else {
		qishou[0] = &girls[0][1];
		qishou[1] = &girls[0][0];
	}
/*
int i = 2,因为数组下标0和1已经做了比较,假定了冠亚军,所以,我们需要从下标2以后的数值再做比较.
*/


	for (int i = 2; i < 12; i++) {

		if (*qishou[1] >= girls[i / 3][i % 3]) {
			continue;
		}

		//候选者高于第二位旗手候选女兵
		//1.候选者比第一位候选人矮
		if (girls[i / 3][i % 3] <= *qishou[0]) {
			qishou[1] = &girls[i / 3][i % 3];
		}
		else {//2.候选者比第一位候选者高
			qishou[1] = qishou[0];
			qishou[0] = &girls[i / 3][i % 3];
		}
	}
	printf("最高女兵的身高: %d,次高女兵的身高: %d\n", *qishou[0], *qishou[1]);

	system("pause");
	return 0;
}

 求排名前三:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
	int girls[4][3] = {
		{160,155,162},
		{163,158,166},
		{157,159,160},
		{170,168,166}
	};

	int* qishou[3] = { 0 };
	int tmp;

	if (girls[0][0] > girls[0][1]) {
		//5 2 4
		if (girls[0][0] > girls[0][2]) {
			if (girls[0][2] > girls[0][1]) {
				tmp = girls[0][1];
				girls[0][1] = girls[0][2];
				girls[0][2] = tmp;
			}
		}
		else {//4 2 5
			tmp = girls[0][0];
			girls[0][0] = girls[0][2];
			girls[0][2] = girls[0][1];
			girls[0][1] = tmp;
		}
	}
	else {//5 4 2
		if (girls[0][0] > girls[0][2]) {
			tmp = girls[0][0];
			girls[0][0] = girls[0][1];
			girls[0][1] = tmp;
		}
		else {
			if (girls[0][1] > girls[0][2]) {
				tmp = girls[0][0];
				girls[0][0] = girls[0][1];
				girls[0][1] = girls[0][2];
				girls[0][2] = tmp;
			}
			else {
				tmp = girls[0][0];
				girls[0][0] = girls[0][2];
				girls[0][2] = tmp;
			}
		}
		
	}
	//printf("%d,%d,%d", girls[0][0], girls[0][1], girls[0][2]);
	qishou[0] = &girls[0][0];
	qishou[1] = &girls[0][1];
	qishou[2] = &girls[0][2];

	for (int i = 3; i < 12; i++) {
		if (*qishou[2] >= girls[i / 3][i % 3]) {
			continue;
		}

		if (girls[i / 3][i % 3] >= *qishou[1] && girls[i / 3][i % 3] <= *qishou[0]) {
			*qishou[1] = girls[i / 3][i % 3];
		}

		if (girls[i / 3][i % 3] >= *qishou[0]) {
			*qishou[0] = girls[i / 3][i % 3];
		}

		if (girls[i / 3][i % 3] >= *qishou[2] && girls[i / 3][i % 3] < *qishou[1]) {
			*qishou[2] = girls[i / 3][i % 3];
		}
	}
	printf("女兵身高统计:\n第一名: %d \n第二名: %d \n第三名: %d\n",*qishou[0], *qishou[1],* qishou[2]);

	system("pause");
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值