早教吧作业答案频道 -->其他-->
给你n数,要求不相邻数和最大的是多少,(第一位和最后一位是相邻的,就像一个环一样)比如,5123453和5的和是最大的,所以结果为8现在呢
题目详情
给你n数,要求不相邻数和最大的是多少,(第一位和最后一位是相邻的,就像一个环一样)比如,
5
1 2 3 4 5
3和5的和是最大的,所以结果为8
现在呢
5
1 2 3 4 5
3和5的和是最大的,所以结果为8
现在呢
▼优质解答
答案和解析
这个肯定要全部循环一次,先设3个变量x0=0,x1=1,x2=2;楼主应该做过在一个数组里找最大数的题目吧?这个类似,找出最大的三个数,把这三个数的下标放到这三个变量中。循环的时候让数组的元素和这三个数比较,最大的放在这三个数中。比如:
for (int i = 0; i < n; ++i)
{
if (a[i] > a[x0])
{
x2 = x1;
x1 = x0;
x0 = i;
}
else if (a[i] > a[x1])
{
x2 = x1;
x1 = i;
}
else if (a[i] > a[x2])
x2 = i;
}
这样这个数组里最大的三个数关系如下a[x0]>a[x1]>a[x2];
然后判断x0-x1是不是等于1(-1),如果不是,那最大的就是a[x0]+a[x1],否则判断x0-x2是不是等于1(-1),如果不是,那最大的就是a[x0]+a[x2],否则最大的肯定是a[x1]+a[x2]。
if (x0 - x1 == 1 || x0 - x1 == -1)
max = a[x0]+a[x1];
else if (x0 - x2 == 1 || x0 - x2 == -1)
max = a[x0]+a[x2];
else
max = a[x1]+a[x2];
for (int i = 0; i < n; ++i)
{
if (a[i] > a[x0])
{
x2 = x1;
x1 = x0;
x0 = i;
}
else if (a[i] > a[x1])
{
x2 = x1;
x1 = i;
}
else if (a[i] > a[x2])
x2 = i;
}
这样这个数组里最大的三个数关系如下a[x0]>a[x1]>a[x2];
然后判断x0-x1是不是等于1(-1),如果不是,那最大的就是a[x0]+a[x1],否则判断x0-x2是不是等于1(-1),如果不是,那最大的就是a[x0]+a[x2],否则最大的肯定是a[x1]+a[x2]。
if (x0 - x1 == 1 || x0 - x1 == -1)
max = a[x0]+a[x1];
else if (x0 - x2 == 1 || x0 - x2 == -1)
max = a[x0]+a[x2];
else
max = a[x1]+a[x2];
看了给你n数,要求不相邻数和最大的...的网友还看了以下:
数学选择题:一个两位数,个位数字与十位数字的和是12,如果设其个数字为x,则这个两位数为()一个两 2020-04-27 …
一个三位数个位是2,如果把个位与百位调换,原数比新数的2倍多52,求这个数一个三位数个位是2,如果 2020-05-13 …
一个六位数,个位上是6,如果把个位上的6移到十万位上,其他数字顺次后移,这个数就扩大4倍,问原数是 2020-05-17 …
一个两位数,个位上的数是十位上的数的2倍,如果把十位上的数与个位上的数对换,那么所得的两位数比原数 2020-05-20 …
一个两位数,个位数是十位上的数的2倍,如果把十位上的数与个位上的对调,那么所得的两位数比原两位数大 2020-06-03 …
有一个两位数,他的十位数字和个位数字的和是14.如果把十位上的数字和个位上的数字位置交换后,所得的 2020-06-14 …
.一个两位数,个位上与十位上的差是5,如果个位上的数是a,则这两个数可以表示成一个两位数,个位上与 2020-07-29 …
一个两位数,个位上的数是十位上的数的两倍,如果把十位上的数与个位上的数对调,那么所得的数比原两位数 2020-07-29 …
一个两位数字,个位数是x,十位数是y,这个两位数为,如果个位写十位对一个两位数字,个位数是x,十位数 2020-11-20 …
一个两位数,个位数比十位数少1,如果这个两位数的个位数和十位数调换位置,得出来的数和一开始的数相.. 2020-11-20 …