作业帮 > 综合 > 作业

free pascal题目两题

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/01 12:27:46
free pascal题目两题
1、拼数游戏
对于给定的n个不小于0的整数,将它们以某种顺序连接成一排,组成一个最小的高精度整数(连成的高精度整数位数不超过255).
例如:当n=3时,3个整数13、325和328,连成的最小整数为:13325328.当n=4时,4个整数7、13、0和246,连接成的最小整数为:132467.
输入:
第一行是一个整数n (1 ≤ n ≤1000),n是给定的整数数目.
接下来的n行,每行有一个整数,表示给定的n个不小于0的整数.
输出:
连成的最小的高精度整数.
样例:
输入(spell.in):
3
13
325
328
输出(spelll.out):
2、切橡皮泥游戏
聪明的小明有n块橡皮泥(只考虑长度,不考虑高与宽),现在想把这些橡皮泥块切割成k块长度相同的小橡皮泥条(原橡皮泥块可以有剩余),整数k是已知的.小明希望得到的橡皮泥条越长越好,请你设计一个程序帮助小明计算能够得到的小橡皮条的最大长度.
题目中的长度单位都是厘米.原橡皮泥块的长度都是正整数,切割得到的小橡皮泥条的长度也是正整数.
输入:
第一行是两个正整数n和k(1 ≤n ≤ 10000,1 ≤ k ≤ 10000),n是原橡皮泥的块数, k是需要得到的小橡皮泥条的数目.
接下来的n行,每行有一个1到10000之间的正整数,表示原n块橡皮泥每块的长度.
输出:
输出能够切割得到的小橡皮泥条的最大长度.如果得到的小橡皮泥条最大长度小于1厘米,则输出”0”.
样例:
输入(plas.in):
3 7
232
124
456
输出(plas.out):
114
第一题不用了
就第二题
【算法分析】二分答案
(具体可以参见以下链接:http://wenku.baidu.com/link?url=DAeOnEekpXeMbhT1FWWWgWn7kL6zp8uTW8UZiBudJAB_HBZrzUo5S74GON8xFzR3eajZSZgrFbto8d80zjJARXqwmdZKKiLyW1J_BQOM98e)
算法复杂度O(nlogn)
【参考程序】
var n,k,l,r,mid:longint;
a:array[1..10000]of longint;
function ok(x:longint):boolean;
var i,j:longint;
begin
j:=0;
for i:=1 to n do
inc(j,a[i] div x);
if j>=k then
exit(true)
else exit(false);
end;
procedure init;
var i:longint;
begin
readln(n,k);
for i:=1 to n do
begin
readln(a[i]);
if a[i]>r then r:=a[i];
end;
end;
begin
init;
l:=1;mid:=(l+r)div 2;
if not(ok(1)) then
begin
writeln(0);
halt;
end;
repeat
mid:=(l+r)div 2;
if ok(mid) then
l:=mid+1
else r:=mid-1;
until l>r;
writeln(r);
end.
【评测结果】无.
再问: 能给个简单易懂的程序吗,我看不懂
再答: 可以超时吗。。。不然只有这种算法
再问: 应该可以
再答: var i,j,n,m,k,l:longint; a:array[1..10000]of longint; begin readln(n,k); for i:=1 to n do begin readln(a[i]); inc(m,a[i]); if a[i]>l then l:=a[i]; end; if m=k then break; end; writeln(i); end.
再问: halt是什么意思
再答: 退出全部程序。
再问: 哦