最近做过的两个习题分享给大家!!!
一、给定一个整形数组,将数组中最大数连同下标一起输出
//方法一:
//定义 index 存下标 、 max 存值,循环比较 arr[i] 和max 的值 比max大 的就将其值赋给max,其下标赋给index
var arr = [1,5,2,3,7,2,10,3,2,4]
var max = arr[0],index = 0
for i in 0..<arr.count{
if arr[i] > Max{
max = arr[i]
index = i
}
}
print(index,max)
//法二:
//定义一个元祖result(下标,值),存放得到的结果
var result = (0 , 0)
for i in 0..<arr.count{
if arr[i] < arr[i+1]{
result = (i+1 , arr[i+1]) //将大得存放到元组中
}
else{
let tmp = arr[i+1]
arr[i+1] = arr[i]
arr[i] = tmp
}
}
print(result)
二、给定一个整型数组,求该数组中第二大的数的下标
//法一:
//将数组copy给一个新数组,对其排序,获取第二大数的值,再去旧的数组中比对,找到这个值,输出其下标 【ps:其实第一题也可用同样的方法】
#if false
var arr = [1,5,2,3,7,0,4,9,8,6]
var arr1 = arr
for _ in 0...1 {
for i in 0..<arr1.count - 1{
if arr1[i] > arr1[i+1]{
let tmp = arr1[i]
arr1[i] = arr1[i+1]
arr1[i+1] = tmp
}
}
}
// print(arr1)
// print(arr1[arr1.count-2])
for i in 0..<arr.count{
if arr[i] == arr1[arr1.count-2]{
print("第二个大的数的下标为:\(i)")
}
}
#endif
//法二:
//要得到下标,就不能改变原数组的位置。于是先用之前说的假设法,求出最大值,将其置0,然后再用同样的方法求最大值,最后输出其值与下标。
#if true
var arr = [1,5,2,3,7,0,4,9,8,6]
var Max = arr[0] , index = 0
//这样的方法可以找到最大的值,且数组保持不变
for i in 1..<arr.count{
if arr[i] > Max {
Max = arr[i]
index = i
}
}
arr[index] = 0 //将最大的数置为0
for i in 1..<arr.count{
if arr[i] > Max {
Max = arr[i]
index = i
}
}
print(index,arr[index])
#endif
//法三:
//假设第一大 和 第二大
var max = 0, maxtwo = 0
//做一次判断,得到假设的第一大值和第二值
if array[0] < array[1]{
max = array[1]
maxtwo = array[0]
}else{
max = array[0]
maxtwo = array[1]
}
//遍历数组来寻找maxtwo的最终
for i in 2...array.count-1{
if array[i] > max{
maxtwo = max
max = array[i]
}else if array[i] > maxtwo{
maxtwo = array[i]
}
}
//遍历当前数组寻找下标
for i in 0...array.count-1{
if array[i] == maxtwo{
print("第二大的数:\(maxtwo),下标:\(i)")
}
}