几个pascal的问题,答道了----赏

[复制链接]
查看11 | 回复3 | 2010-7-12 10:30:39 | 显示全部楼层 |阅读模式
1.NOIP1998无人能解2的冥次方问题
任意一个正整数都可以用2的幂次方表示,例如:
137=2^7+2^3+2^0
同时约定次方用括号来表示,即a^b=a(b)
由此可知,137可表示:2(7)+2(3)+2(0)
进一步:7=2^2+2+2^0(2^1用2表示),3=2+2^0
所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:1315=2^10+2^8+2^5+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入137
输出2(2(2)+2+2(0))+2(2+2(0))+2(0)
2.还是NOIP1998卢斯加发表
3.图的m着色问题
给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的。图的m着色问题是对于给定图G和m种颜色,找出所有不同的着色法。

对于给定的无向连通图G和m种不同颜色,编程计算图的所有不同着色法
输入5 8 4

1 2
1 3
1 4
2 3
2 4
2 5
3 4
4 5
输出48
4.分油问题
设有大小不等的3个无刻度的油桶,分别能够存满,X,Y,Z公升油(例如X=80,Y=50,Z=30)。初始时,第一个油桶盛满油,第二、三个油桶为空。编程寻找一种最少步骤的分油方式,在某一个油桶上分出targ升油(例如targ=40)。若找到解,则将分油方法打印出来;否则打印信息“UNABLE”等字样,表示问题无解。
输入80 50 30 40
输出80 0 0
30 50 0
30 20 30
60 20 0
60 0 20
10 50 20
10 40 30
5.关路灯问题(难)
某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少)。老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯。

为了给村里节省电费,老张记录下了每盏路灯的位置和功率,他每次关灯时也都是尽快地去关,但是老张不知道怎样去关灯才能够最节省电。他每天都是在天亮时首先关掉自己所处位置的路灯,然后可以向左也可以向右去关灯。开始他以为先算一下左边路灯的总功率再算一下右边路灯的总功率,然后选择先关掉功率大的一边,再回过头来关掉另一边的路灯,而事实并非如此,因为在关的过程中适当地调头有可能会更省一些。

现在已知老张走的速度为1m/s,每个路灯的位置(是一个整数,即距路线起点的距离,单位:m)、功率(W),老张关灯所用的时间很短而可以忽略不计。

请你为老张编一程序来安排关灯的顺序,使从老张开始关灯时刻算起所有灯消耗电最少(灯关掉后便不再消耗电了)。
输入5 3
2 10
3 20
5 20
6 30
8 10
输出270
用pascal,在没一部旁边住上解释,答出一道再加10分,5道都对了再加50分

回复

使用道具 举报

千问 | 2010-7-12 10:30:39 | 显示全部楼层
1.program ZD;typearr=array[0..200] of longint;vark,w,maxn,i,tmp:longint;ans,b:arr;procedure plus(a,b:arr;var c:arr);
//高精度加法var i:longint;beginfillchar(c,sizeof(c),0);if a[0]>b[0] then c[0]:=a[0]else c[0]:=b[0];for i:=1 to c[0] do begininc(c,a+b);inc(c[i+1],c div 1000);
回复

使用道具 举报

千问 | 2010-7-12 10:30:39 | 显示全部楼层
1递归,2没见过。。。。。后面搜索(宽搜深搜。。。)
回复

使用道具 举报

千问 | 2010-7-12 10:30:39 | 显示全部楼层
第一题很简单,我们知道一个十进制数可以用二进制数表达出来例如:5(10)=101(2)即5可以写成2^2+2^07(10)=111(2) ====2^2+2^1+2^0因此可轻易编写出程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行