前段时间沉迷于打CSDN的比赛,结果生动形象地诠释了什么叫做“人菜瘾大”
除了第一次拿了个并列前十(还算尝到个甜头)其余三次都是惨败┐(゚~゚)┌
其中有不少题目都涉及到了一维数组间元素位置的互换,而我...还在管人家叫数列(-ω-;)
(毕竟自学不超过16小时)
目录
常见的所谓“数组元素互换”
所以,只能靠自己了(:3_ヽ)_
特殊但常见:交换最值
赋值/创建变量
获取最值
数值互换
封面回收
CSDN中,也有许多博客对数组的元素互换有过讨论,但绝大部分是二维数组,且为固定横纵互换,输入输出结果就像这样:
[1,2,3]//输入
[4,5,6]
[7,8,9]
//------------------
[1,4,7]//输出
[2,5,8]
[3,6,9]
这种转换似乎常见于各种练习题,及高校课程的例题 ;
但很显然,不是一维数组的范畴;
搜索结果剩下的部分,也确实有比较接近的结果,讨论交换一维数组中的最大值与最小值。
然而一般的数组的最大值和最小值,在不发生变化的情况下,明显是恒定的,无法达到自主选择的效果。(╯°Д°)╯︵┻━┻
其实,一维数组的最大值最小值互换(或简称最值互换),也给了我们一些思路:
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//首先,我们需要遍历这个含有10个元素的一维数组,找出其中的最大值和最小值。可以使用一个循环来实现:
int max = arr[];
int min = arr[];
------------我是虚线A------------------
for (int i = 1; i < 10; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
if (arr[i] < min)
{
min = arr[i];
}
}
------------我是虚线B------------------
int temp = max;//找到最大值和最小值后,我们可以使用一个临时变量来交换它们的位置
max = min;
min = temp;
printf("最大值:%d,最小值:%d\n", max, min);
上述代码块由CSDN内置AI“C知道”生成。
显然这个小家伙忘记了怎么缩进,结果还是得我自己一个一个空格地敲回来(〃>皿<)
可大致将其划分为三部分:
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};//首先,我们需要遍历这个含有10个元素的一维数组,找出其中的最大值和最小值。可以使用一个循环来实现:
int max = arr[];
int min = arr[];
for (int i = 1; i < 10; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
if (arr[i] < min)
{
min = arr[i];
}
}
int temp = max;
max = min;
min = temp;
其中,最为重要且能够通用的核心思想,显然是利用中间变量temp,通过多次相互赋值,来达到交换效果(见下图),在实现一般情况的转换时,我们也可以采用这个方法(ノ´▽`)ノ♪
max → temp//其实也不一定非要写temp
↖ min ↙
其实拿到核心思想后,不难看出最值互换和一般互换,只是数值属性上的差异,
自行创建变量,然后用cin(没错这是C++)实现交换位置的自主选择(输入数即为数组位置编号),这里插入一段伪代码(doge)
输入A,B;
↓
A → temp
↖ B ↙
↓
输出
完结撒花花~✿✿ヽ(°▽°)ノ✿