版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_34524528/article/details/88393754
翻转数列1
简单模拟(超时)
import java.util.*;
public class Main {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args){
long n,m;
n = sc.nextInt();
m = sc.nextInt();
long sum =0;
long k = 1;
long symbol = 1;
if(m==1)
for(long i=1;i<=n;i++,k++){
if(k==m){symbol*=-1;k=0;}
sum+= (i * symbol);
//System.out.println(i * symbol);
}
else
for(long i=1;i<=n;i++){
if(i%m==1){symbol*=-1;}
sum+= (i * symbol);
//System.out.println(i * symbol);
}
System.out.println(sum);
}
}
找前 n 项和公式
没一个【负,正】为一组,以哦那个有 n/2m 组。开头是负数。
对于其中任意一组有 -x,-(x+1),-(x+2)…-(x+m-1), (x+m),(x+m+1),…,(x+2m-1);
本组各项相加:
原式 = -x+ -(x+1) + … + -(x+m-1) + x+m + x+m+1 + … + x+2m+1
=-x+(x+m) + -(x+1)+(x+1+m) + -(x+2)+(x+2+m) + … + -(x+m-1)+(x+2m-1)
=-m+m+m+…+m ······ 即m个m相加
=(m*m)
=m2
一共有n/2m组,故前n项和
S = m2n/2m = mn/2.
import java.util.*;
public class Main {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args){
long n,m;
n=sc.nextLong();
m=sc.nextLong();
System.out.println(m*n/2);
}
}
纸牌游戏2
import java.util.*;
public class Main{
static Scanner sc = new Scanner(System.in);
public static void main(String []args){
int n = sc.nextInt();
List<Integer> list = new ArrayList<>();
for(int i=0;i<n;i++){
list.add(sc.nextInt());
}
Collections.sort(list, Collections.reverseOrder());
Integer difference = 0;
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
difference += it.next();
if(it.hasNext()) difference -= it.next();
}
System.out.println(difference);
}
}