输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。错误写法以及正确写法。
程序员文章站
2022-03-02 12:13:42
...
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
先看一种解法:
#include<stdio.h>
void swap(int *a, int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
return;
}
int main(int argc, char *argv[])
{
int a[10] = {0};
int i, min, max;
min = 0;
max = 0;
printf("请输入10个数\n");
for (i=0; i<=9; i++)
scanf("%d", &a[i]);
for (i=0; i<=9; i++)
{
if (a[min] > a[i])
min = i;
if (a[max] < a[i])
max = i;
}
swap(&a[0], &a[max]);
swap(&a[9], &a[min]);
for (i=0; i<=9; i++)
printf("-->%d", a[i]);
printf("\n");
}
这种解法乍一看没什么问题,符合题意,但我无意中发现了这种写法的BUG——即如果你输入的10个数, 最小的数刚好在第一位或者最大的数刚好在最后一位的时候,上述代码的处理就会出现错误,按题目的意思,是想让最小的数放在最后一位,最大的数放在第一位。举个例子,假如最小的数在第一位,即a[0];最大的数在第五位,即a[5]。按上述代码处理如下:交换a[5]与a[0],接着交换a[0]与a[9],这样最小的数跑到了第六位的位置,最大的数跑到了最后一位上。显然不符合题目要求。
所以正确的应该是下面的代码:
#include<stdio.h>
void swap(int *a, int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
return;
}
int main(int argc, char *argv[])
{
int a[10] = {0};
int i, min, max;
min = 0;
max = 0;
printf("请输入10个数\n");
for (i=0; i<=9; i++)
scanf("%d", &a[i]);
for (i=0; i<=9; i++)
{
if (a[min] > a[i])
min = i;
if (a[max] < a[i])
max = i;
}
if (min!=0 && max!=9)
{
swap(&a[0], &a[max]);
swap(&a[9], &a[min]);
}
else if (0==min && 9!=max)
{
swap(&a[min], &a[max]);
swap(&a[9], &a[max]);
}
else if (0!=min && 9==max)
{
swap(&a[min], &a[max]);
swap(&a[0], &a[min]);
}
else if (0==min && 9==max)
{
swap(&a[min], &a[max]);
}
for (i=0; i<=9; i++)
printf("-->%d", a[i]);
printf("\n");
}
下一篇: el表达式
推荐阅读
-
Java_输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
-
【C语言】输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
-
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
-
代码实现:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组...
-
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
-
java 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
-
JS输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
-
14、基础编程:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
-
JAVA 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
-
输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组