PASCAL 编一个PASCAL程序,给定一堆正整数,要求分成两堆,两堆数的和分别为S1和S2,使S1²-S2²最小【输入】第一行n,表示共有n个数第二行共n个用空格隔开的正整数a[i],表示给定的一堆正整数
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/22 12:04:38
PASCAL编一个PASCAL程序,给定一堆正整数,要求分成两堆,两堆数的和分别为S1和S2,使S1²-S2²最小【输入】第一行n,表示共有n个数第二行共n个用空格隔开的正整数a[
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)),就这样求出全部这些值中的最小值即可.
参考程序
vari,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