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;
}