7、排队接水 问题描述:
“五一”劳动节到了,向阳小学五年级安排了一个小组的同学到文化广场搞清洁。广场边上只有一个水龙头,要求每一个同学带一个桶接水搞清洁,由于每个同学所带的桶大小不同,接满水所用的时间也不同,现在已知每一个同学的桶接满水所需要的时间,要求所有同学都要排队等候接水,注意接满水后的同学马上去搞清洁,不再等候,对于一个排好队的顺序,可以计算出所有同学等候接水的时间的总和。如有4个同学,他们接满水所需的时间分别是5、3、6、7,则第一个同学接水时,第二、三、四个同学都要等5个单位的时间,第二个同学接水时,则第三、四个同学都要等3个单位时间,第三个同学接水时,则第四个同学要等6个单位的时间,所有同学等候的时间共为:5*3+3*2+6*1=27。但如果同学们排队顺序改一下,他们接满水所需的时间分别是7、5、6、3,则所有同学等候的时间共为:7*3+5*2+6*1=37。现在给出每一个同学接满水所需的时间,请你安排一种排队顺序,使得所有同学等候的时间总和为最小,输出这个最小值。 数据输入:
从文件water.in中读入数据,第一行为一个正整数N(1 结果输出到文件water.out中,只有一个数,表示所有同学等候的时间总和的最小值。 输入输出样例: Water.in 4 5 3 6 7 Water.out 25 【问题分析】 这题就是给你N个同学接满水所需的时间,让你求出所有同学等候时间总和的最小值 【算法分析】 这题可以先对N个同学接满水所需的时间从小到大进行排序,由于N和Y都比较小,所以用什么排序都可以,然后把每个同学接水时,剩下同学等待的总时间加到计数器t中,最后输出t即可。 【参考程序】 var n,i,t:longint; a:array[1..100] of longint; procedure try(l,r:longint); var i,j,x,t:longint; begin i:=l; j:=r; x:=a[(l+r) div 2]; repeat while a[i] 11 if i<=j then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j); end; until i>j; if l assign(input,'water.in'); assign(output,'water.out'); reset(input); rewrite(output); readln(n); for i:=1 to n do readln(a[i]); try(1,n); for i:=1 to n do t:=t+a[i]*(n-i); writeln(t); close(input); close(output); end. 12 8、聪明的小李 问题描述: 小李是希望小学六年级的学生,在一次数学课上,张老师出了一道题,小李很快就答出来了。这个题目是这样的:给定一个正整数N,请求出2~N之间长度最长的、成等差数列的素数(质数)。例如:当N的值为40时,在2~40之间的全部素数有: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37。其中公差(每两个数之间的差)为1的素数数列为2, 3,其长度(素数的个数)为2, 公差为2的素数数列为3, 5, 7,其长度为3. ?? 。 数据输入: 数据从文件sushu.in中读入,只有一个正整数N(2 数据输出到文件sushu.out中,第一行只有一个数t,表示2~N之间长度最长的、成等差数列的素数(质数)的个数,第二行有t个数,表示符合条件的素数数列,两个数之间用空格隔开(如果最长长度相同的素数列有多种方案,则输出第一个数数值最小的那个数列)。 提示 :1、所谓等差数列就是每两个数之间的差都相等的一列数。 2、本题算法可为:首先用筛选法求2-N之间的全部素数,存放在数组B中,然后 用2个变量i,j分别表示数列的第一个数和公差,将求出的每个素数尝试作为素数列的第一个数,公差逐步增大,从而求出满足条件的素数数列。 输入输出样例: Sushu.in 40 Sushu.out 5 5 11 17 23 29 【问题分析】 这题就是给你一个数N\\,让你求出2~N中所有素数所能组成的最大的等差数列 【算法分析】 这题可以先求出2~N中所有的素数,放在b数组中,并求出2~N中所有的素数的个数k,然后求出以b[i]为首项,b[j]-b[i]为公差,所组成的等差数列最多能有几项(1<=i var a:array[2..10000] of boolean; b:array[1..2000] of longint; n,i,j,k,t,s,ans,total,max,q:longint; begin assign(input,'sushu.in'); assign(output,'sushu.out'); reset(input); rewrite(output); readln(n); for i:=2 to trunc(sqrt(n)) do if not a[i] then 13 begin k:=i; while k+i<=n do begin k:=k+i; a[k]:=true; end; end; k:=0; for i:=2 to n do if not a[i] then begin inc(k); b[k]:=i; end; max:=1; ans:=1; for i:=1 to k-1 do for j:=i+1 to k do begin s:=b[j]-b[i]; total:=2; t:=b[j]; while not a[t+s] do begin t:=t+s; if t>n then break; inc(total); end; if total>max then begin max:=total; ans:=i; q:=s; end; end; writeln(max); for i:=1 to max-1 do write(b[ans]+(i-1)*q,' '); writeln(b[ans]+(max-1)*q); close(input); close(output); end. 14 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库小学复赛试题精选(3)在线全文阅读。
相关推荐: