PASCAL 编一个PASCAL程序,给定一堆正整数,要求分成两堆,两堆数的和分别为S1和S2,使S1²-S2²最小【输入】第一行n,表示共有n个数第二行共n个用空格隔开的正整数a[i],表示给定的一堆正整数

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 03:59:23
PASCAL 编一个PASCAL程序,给定一堆正整数,要求分成两堆,两堆数的和分别为S1和S2,使S1²-S2²最小【输入】第一行n,表示共有n个数第二行共n个用空格隔开的正整数a[i],表示给定的一堆正整数

PASCAL 编一个PASCAL程序,给定一堆正整数,要求分成两堆,两堆数的和分别为S1和S2,使S1²-S2²最小【输入】第一行n,表示共有n个数第二行共n个用空格隔开的正整数a[i],表示给定的一堆正整数
PASCAL
编一个PASCAL程序,
给定一堆正整数,要求分成两堆,两堆数的和分别为S1和S2,使S1²-S2²最小
【输入】
第一行n,表示共有n个数
第二行共n个用空格隔开的正整数a[i],表示给定的一堆正整数
【样例输入】
4
1 2 3 4
【样例输出】
0

PASCAL 编一个PASCAL程序,给定一堆正整数,要求分成两堆,两堆数的和分别为S1和S2,使S1²-S2²最小【输入】第一行n,表示共有n个数第二行共n个用空格隔开的正整数a[i],表示给定的一堆正整数

样例说明

1和4一堆,2和3一堆,5*5-5*5 = 0

题目分析

题目给出n个数,让你将这n个数分成两组,使得两组和的平方差的绝对值最小,输出此时这两组的和的平方差的绝对值.

算法分析

这道题经过仔细分析不难发现,其实是一道0/1背包的变形版.0/1背包我在这里不再重点提及.首先我们用0/1背包的思想,求出这n个数能够到达的所有值,记这n个数的总和为s,然后我们将所有可能到达的值,用循环i进行逐一计算,当这个值存在时,即此时的值为abs(sqr(s-i)-sqr(i)),就这样求出全部这些值中的最小值即可.

参考程序

var
  i,j,k,m,n,s,t,min:longint;
  f:array[0..100000] of boolean;
  a:array[1..1000] of longint;
begin
  read(n);
  s:=0;
  for i:=1 to n do
  begin
    read(a[i]);
    s:=s+a[i];
  end;
  f[0]:=true;
  for i:=1 to n do
  begin
    for j:=s downto a[i] do
      if f[j-a[i]] then f[j]:=true;
  end;
  min:=maxlongint;
  for i:=1 to s do
    if f[i] then
    begin
      if abs(sqr(i)-sqr(s-i))<minthen min:=abs(sqr(i)-sqr(s-i));
    end;
  writeln(min);
end.

pascal关于因式分解的有关问题用pascal语言编出一个程序输入:100输出:2*2*5*5急用! Miller-Rabbin素数测试法求一个用Miller-Rabbin算法判断是否为素数的程序,注意要用PascalPascal!Pascal!Pascal!Pascal!Pascal!Pascal!Pascal!Pascal!最好有说明 pascal pascal pascal! 求一个背包程序(PASCAL)最原始的 产生数pascal程序给出一个整数n(n pascal两数平均数程序 pascal高精度快速幂程序 整数分解(版本2) pascal一个正整数可以分解成若干个自然数之和.请你编一个程序,对于给出的一个正整数n(1 编一个pascal程序,从键盘输入一个真分数的分子和分母,输出它的小数形式,精确到小数点后1000位. pascal素数问题编一个程序,计算1-n范围内素数的个数.输入包括多组数据.每组数据仅有一个整数n (1 在 TURBO PASCAL 中 编一程序 输入一个正整数N 将N分解成质因数幂的乘积形式 请知道的一定告诉下额 用 Pascal 编写一个程序将十进制整数n转换为二进制数.用 Pascal 编写加说明 PASCAL程序 全1数字全1 数字请用PASCAL编写,输入一个奇数P(P PASCAL试题急!任给一个自然数n(n N 的倍数 pascal语言写一个程序,对于给定的一个自然数N(0 pascal的蛇形矩阵,设有一个n*n的矩阵(0<n<50)用pascal语言怎么编? 用FREE PASCAL 做一个程序‘判断数是否是三位数’ pascal问题,求程序:1、 文本文件t.in中第一行的一个 正整数N(N