C语言将最大数与最小值兑换,//一、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,写三个函数:1.输入10个数,2.进行处理.3输出10个数 //输入10个数...

//1、输入10个整数,将其中最小的数与第一个数对换,把最大的数和最后一个数对换,写三个函数:1.输入10个数,2.进行处理.3输出10个数 //输入10个数

这是我写的第二个函数的实现也就把最小值的数与第一对换,把最大值与最后一位对换,但是我运行后,总是出现这个问题:

请输入10个数:2 1 3 4 5 6 7 8 10 9

输出结果为:1 9 2 3 4 5 6 7 8 10

问题:最大值移到最后一位了,但是最后一个元素总是移到第二个元素位置上,代码如下,求大神看看那里出错了

第一次发帖,分不多啊,见谅

//2.进行处理

void solveArr(int *p, int count){

for (int i = 0; i

int min = *p;

int temp = 0,index = 0;

if (min > *(p + i)) {

min = *(p + i);  //找出最小值

index = i;

temp = *p;      //存储第一个元素

*p = min;       //将最小数赋予第一位上

*(p + index) = temp;//将第一个数赋予最小值所在的位置.

}

}

for (int j = 0; j 

int max = *p;

int temp1 = 0,index1 = 0;

if (max 

max = *(p + j);//找出最大值

index1 = j;  //存储最大值所在的下标

temp1 = *(p + 9);  //存储最后一个元素

*(p + count - 1) = max;//将最大数赋予最后一个位置

*(p + index1) = temp1;//将最后一个元素赋予最大值所在的位置

}

}

}

------解决方案--------------------

把事情分开做

第一找出最小值

第二交换最小值到第一个位置

最大值同样分开做即可

不过,如果最大最小值位置有重叠,交换的结果哦,,不能确定是否正确

------解决方案--------------------

void solveArr(int *p, int count){

for (int i = 0; i

int min = *p;

int temp = 0,index = 0;

if (min > *(p + i)) {

min = *(p + i);  //这里并不是最小值,而是比min小的值

index = i;

temp = *p;      //存储第一个元素

*p = min;       //将最小数赋予第一位上

*(p + index) = temp;//将第一个数赋予最小值所在的位置.

}

}

for (int j = 0; j 

int max = *p;

int temp1 = 0,index1 = 0;

if (max 

max = *(p + j);//这里也不是最大值,而是比max大的值

index1 = j;  //存储最大值所在的下标

temp1 = *(p + 9);  //存储最后一个元素

*(p + count - 1) = max;//将最大数赋予最后一个位置

*(p + index1) = temp1;//将最后一个元素赋予最大值所在的位置

}

}

}

所谓最小值最大值,是你循环完整个数组得到的结果。你在循环中只要找到比暂时的结果(max,min)就认为是最小值或者最大值进行交换,这是不对的。你的顺序应该这样调:

void solveArr(int *p, int count){

int min = *p;

int temp = 0, index = 0;

for (int i = 0; i

if (min > *(p + i)) {

min = *(p + i);  //找出最小值

index = i;

}

}

temp = *p;      //存储第一个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值