我想找到系列中缺少的数字,所以我想一个简单的想法为什么不在数组中添加所有串联的数字并将其保存在一个变量中,然后按公式Sn=n/2(a+l)
计算系列的总和但在计算序列总和时我得到了一些错误。
public class Missing {
public static void main(String[] args) {
int ar [] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int sum = 0; int total=0;
for(int num: ar)
{
sum = sum+num;
}
int n = ar.length;
int a = ar[0];
int l =ar[ar.length-1];
total = [n/2*(a+l)];
System.out.print("The missing number is "+(sum-total));
}}
总计= [n / 2 *(a + 1)]; ............................(1)
这是我收到错误的地方。
答案 0 :(得分:1)
您可以使用以下逻辑,它更易于使用和理解
for(int i=0;i<ar.length-1;i++)
{
if(ar[i]!=ar[i+1]-1)
{
System.out.print("The missing number is "+(ar[i]+1)+"\n");
break;
}
}
答案 1 :(得分:0)
total = [n/2*(a+l)];
[]
中的第一件事是在此上下文中无效的语法。我注意到的第二件事是,你计算总和的公式似乎很奇怪,也许你的意思是Sn = (n * (a + l)) / 2?
。进行这两项更改后,代码应如下所示:
public class Missing {
public static void main(String[] args) {
int ar [] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int sum = 0;
for(int num: ar)
{
sum = sum+num;
}
int n = ar.length;
int a = ar[0];
int l =ar[ar.length - 1];
int total = (n * (a + l)) / 2;
System.out.print("The missing number is "+(sum - total));
// outputs 0 which is correct nothing is missing
// Now if you remove say 12 from the array
// by changing the array to int ar [] = {1,2,3,4,5,6,7,8,9,10,11,0,13};
// you should get back -12 which means 12 is missing
}
}
答案 2 :(得分:0)
如果您不想使用我的上述逻辑。您必须更改代码: 编辑:
jdbcTemplate.queryForObject("...", new RowMapper<Student>() {
@Override
public Student mapRow(final ResultSet rs, final int rowNum) throws SQLException {
return Q2Obj.fromResultSet(rs, Student.class);
}
});
n已被指定为ar.length + 1,因为需要+1才能补偿数组列表中缺少的元素
此外,公式尚未正确写入代码:
int n = ar.length+1;
如果先将n除以2,则会截断小数点后的位置,因为n是整数而不是浮点数。所以,当n不均匀时,你的逻辑会失败。
最后,缺失的数字将是(总和)而不是相反,因为'total'包含缺失的数字而'sum'不包含。
total = (n* (a + l))/2;