//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; //存储第一个元素