油价为什么居高不下_油价算法为什么不变动呢
1.我想知道队列算法能干什么
2.这些生活中常见的东西,居然是科学未解之谜?
油耗的计算为:油耗x油价/100公里。百公里8.5升,按照7块钱一升来算,那么大概需要?60,也就是说每公里六毛钱左右。
设油箱红灯亮了去加油,加的是92号汽油,单价是6.2元/L,加满后总共用了300块(这里不讲你油箱多少L)。然后你归零公里数,从0公里开始算,等到下次红灯再亮时去加油。此时车子显示你一共跑了 480公里,加了290元,那么我们就得到数据290元跑了480公里。
百公里油耗,就是290元/480公里=0.6 0.6*100=60 60/6.2(油的单价)=9.67L 。
每公里就是290元/480公里=0.6。
扩展资料每个人的车型不同,性能不同,油耗自然就会不一样,但是算法都是一样的,只要记住初始里程数和结束里程数,就能够算出自己车辆的油耗,但是往往这个实际油耗会比官方给出的油耗要高出一部分。
因为官方给出的数据都是理想状态的,比如一个驾驶员按照一定速度行驶一百公里的油耗,由于多数车辆在90公里/小时接近经济车速,所以大多数官方给出的油耗都是90公里/小时的百公里油耗,这完全就是理想状态。
百度百科-油耗
我想知道队列算法能干什么
一般一公里的油费在0.5元到2元左右。
这个值没有准确一致的答案,因为它受到很多客观因素的影响。比如:当地油价。此外,92号汽油的价格与95号汽油不同。尤其是在市区开车,各种红绿灯,堵车,车走走停停,跑不动。同样的路程,油耗肯定比高速跑多,燃油成本也相应多。
汽车排量的差异。小排量车的油耗主要取决于车重,与排量本身关系不大。排量大于2.0的汽车受排量因子影响较大。
这些生活中常见的东西,居然是科学未解之谜?
队列是一种先进先出的数据结构,由于这一规则的限制,使得队列有区别于栈等别的数据结构。
作为一种常用的数据结构,同栈一样,是有着丰富的现实背景的。以下是几个典型的例子。
[例5-2] 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(设出发时油箱是空的).给定两个城市之间的距离D1,汽车油箱的容量C(以升为单位),每升汽油能行驶的距离D2,出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di,每升汽油价格Pi(i=1,2,……N).
计算结果四舍五入至小数点后两位.
如果无法到达目的地,则输出"No Solution".
样例:
INPUT
D1=275.6 C=11.9 D2=27.4 P=2.8 N=2
油站号I
离出发点的距离Di
每升汽油价格Pi
1
102.0
2.9
2
220.0
2.2
OUTPUT
26.95(该数据表示最小费用)
[问题分析]
看到这道题,许多人都马上判断出穷举是不可行的,因为数据都是以实数的形式给出的.但是,不用穷举,有什么方法是更好的呢 递推是另一条常见的思路,但是具体方法不甚明朗.
既然没有现成的思路可循,那么先分析一下问题不失为一个好办法.由于汽车是由始向终单向开的,我们最大的麻烦就是无法预知汽车以后对汽油的需求及油价变动;换句话说,前面所买的多余的油只有开到后面才会被发觉.
提出问题是解决的开始.为了着手解决遇到的困难,取得最优方案,那就必须做到两点,即只为用过的汽油付钱;并且只买最便宜的油.如果在以后的行程中发现先前的某些油是不必要的,或是买贵了,我们就会说:"还不如当初不买."由这一个想法,我们可以得到某种启示:设我们在每个站都买了足够多的油,然后在行程中逐步发现哪些油是不必要的,以此修改我们先前的购买,节省资金;进一步说,如果把在各个站加上的油标记为不同的类别,我们只要在用时用那些最便宜的油并为它们付钱,其余的油要么是太贵,要么是多余的,在最终的中会被排除.要注意的是,这里的便宜是对于某一段路程而言的,而不是全程.
[算法设计]由此,我们得到如下算法:从起点起(包括起点),每到一个站都把油箱加满(终点除外);每经过两站之间的距离,都按照从便宜到贵的顺序使用油箱中的油,并计算花费,因为这是在最优方案下不得不用的油;如果当前站的油价低于油箱中仍保存的油价,则说明以前的购买是不够明智的,其效果一定不如购买当前加油站的油,所以,明智的选择是用本站的油代替以前购买的高价油,留待以后使用,由于我们不是真的开车,也没有为备用的油付过钱,因而这样的反悔是可行的;当我们开到终点时,意味着路上的费用已经得到,此时剩余的油就没有用了,可以忽略.
数据结构用一个队列:存放由便宜到贵的各种油,一个头指针指向当前应当使用的油(最便宜的油),尾指针指向当前可能被替换的油(最贵的油).在一路用一路补充的过程中同步修改数据,求得最优方案.
注意:每到一站都要将油加满,以确保在有解的情况下能走完全程.并设出发前油箱里装满了比出发点贵的油,将出发点也看成一站,则程序循环执行换油,用油的操作,直到到达终点站为止.
本题的一个难点在于认识到油箱中油的可更换性,在这里,突破现实生活中的思维模式显得十分重要.
[程序清单]
program ex5_2(input,output);
const max=1000;
type recordtype=record price,content:real end;
var i,j,n,point,tail:longint;
content,change,distance2,money,use:real;
price,distance,consume:array[0..max] of real;
oil:array [0..max] of recordtype;
begin
write('Input DI,C,D2,P:'); readln(distance[0],content,distance2,price[0]);
write('Input N:'); readln(n); distance[n+1]:=distance[0];
for i:=1 to n do
begin
write('Input D[',i,'],','P[',i,']:');
readln(distance[i],price[i])
end;
distance[0]:=0;
for i:=n downto 0 do consume[i]:=(distance[i+1]-distance[i])/distance2;
for i:=0 to n do
if consume[i]>content then
begin writeln('No Solution'); halt end;
money:=0; tail:=1; change:=0;
oil[tail].price:=price[0]*2; oil[tail].content:=content;
for i:=0 to n do
begin
point:=tail;
while (point>=1) and (oil[point].price>=price[i]) do
begin
change:=change+oil[point].content;
point:=point-1
end;
tail:=point+1;
oil[tail].price:=price[i];
oil[tail].content:=change;
use:=consume[i]; point:=1;
while (use>1e-6) and (point=oil[point].content
then begin use:=use-oil[point].content;
money:=money+oil[point].content*oil[point].price;
point:=point+1 end
else begin oil[point].content:=oil[point].content-use;
money:=money+use*oil[point].price;
use:=0 end;
for j:=point to tail do oil[j-point+1]:=oil[j];
tail:=tail-point+1;
change:=consume[i]
end;
writeln(money:0:2)
end.
[例5-3] 分油问题:设有大小不等的3个无刻度的油桶,分别能够存满,X,Y,Z公升油(例如X=80,Y=50,Z=30).初始时,第一个油桶盛满油,第二,三个油桶为空.编程寻找一种最少步骤的分油方式,在某一个油桶上分出targ升油(例如targ=40).若找到解,则将分油方法打印出来;否则打印信息"UNABLE"等字样,表示问题无解.
[问题分析] 这是一个利用队列方法解决分油问题的程序.分油过程中,由于油桶上没有刻度,只能将油桶倒满或者倒空.三个油桶盛满油的总量始终等于开始时的第一个油桶盛满的油量.
[算法设计] 分油程序的算法主要是,每次判断当前油桶是不是可以倒出油,以及其他某个油桶是不是可以倒进油.如果满足以上条件,那么当前油桶的油或全部倒出,或将另一油桶倒满,针对两种不同的情况作不同的处理.
程序中使用一个队列Q,记录每次分油时各个油桶的盛油量和倾倒轨迹有关信息,队列中只记录互不相同的盛油状态(各个油桶的盛油量),如果程序列举出倒油过程的所有不同的盛油状态,经考察全部状态后,未能分出TARG升油的情况,就确定这个倒油问题无解.队列Q通过指针front和rear实现倒油过程的控制.
[程序清单]
program ex5_3(input,output);
const maxn=5000;
type stationtype=array[1..3] of integer;
elementtype=record
station:stationtype;
out,into:1..3;
father:integer
end;
queuetype=array [1..maxn] of elementtype;
var current,born:elementtype;
q:queuetype;
full,w,w1:stationtype;
i,j,k,remain,targ,front,rear:integer;
found:boolean;
procedure addQ(var Q:queuetype;var rear:integer; n:integer; x:elementtype);
begin
if rear=n
then begin writeln('Queue full!'); halt end
else begin rear:=rear+1; Q[rear]:=x end
end;
procedure deleteQ(var Q:queuetype;var front:integer;rear,n:integer;var x:elementtype);
begin
if front=rear
then begin writeln('Queue empty!'); halt end
else begin front:=front+1; x:=Q[front] end
end;
function dup(w:stationtype;rear:integer):boolean;
var i:integer;
begin
i:=1;
while (i<=rear) and ((w[1]q[i].station[1]) or
(w[2]q[i].station[2]) or (w[3]q[i].station[3])) do i:=i+1;
if i0 then
begin
print(q[k].father);
if k>1 then write(q[k].out, ' TO ',q[k].into,' ')
else write(' ':8);
for i:=1 to 3 do write(q[k].station[i]:5);
writeln
end
end;
begin {Main program}
writeln('1: ','2: ','3: ','targ');
readln(full[1],full[2],full[3],targ);
found:=false;
front:=0; rear:=1;
q[1].station[1]:=full[1];
q[1].station[2]:=0;
q[1].station[3]:=0;
q[1].father:=0;
while (front begin
deleteQ(q,front,rear,maxn,current);
w:=current.station;
for i:=1 to 3 do
for j:=1 to 3 do
if (ij) and (w[i]>0) and (w[j]remain
then begin w1[j]:=full[j]; w1[i]:=w[i]-remain end
else begin w1[i]:=0; w1[j]:=w[j]+w[i] end;
if not(dup(w1,rear)) then
begin
born.station:=w1;
born.out:=i;
born.into:=j;
born.father:=front;
addQ(q,rear,maxn,born);
for k:=1 to 3 do
if w1[k]=targ then found:=true
end
end
end;
if not(found)
then writeln('Unable!')
else print(rear)
end.
尽管自行车、玻璃和冰,都是生活中很常见的东西,但是你可能想不到的是,科学家并没有完全理解它们。通过下面的讨论,你将会发现,现实远比我们想象的要复杂得多。
为什么自行车在行驶中不会倒下?
2011年,一个国际研究小组突然“投下一颗重磅”,声称尽管已经分析了150多年,但世界上还没有人真正弄懂为什么自行车在行驶中不会倒下。估计世界上许多自行车骑手听到这个消息后会立刻下车,并不可思议地盯着他们的自行车——多年来他们一直在做的事情,竟然是一件科学无法解释的现象!
不过准确地来说,科学家不知道的是,能使自行车保持稳定的最简单的充分必要条件是什么。自行车的研制,主要依靠的是不断试验,使自行车在行驶中更不易倒下。但是要想解释背后的原理就比较麻烦了。研究人员开始发现,要想解释自行车是如何工作的,数学上需要大约25个变量,例如自行车的前叉相对于路面的角度,质量的分布以及车轮的大小等等。
之后,研究人员把自行车保持稳定的条件变量简化为两个:一个叫“迹”的大小,指的是前轮触地的位置到前叉延长线与地面相交的位置之间的距离;另一个则是可以保持旋转的车轮直立的陀螺恢复力(一种令旋转物体恢复平衡的力,陀螺最为典型,故以陀螺命名)。
不过在2011年,那个国际研究小组不仅对这个理论重新分析了一遍,而且还把一辆自行车中的“迹”和陀螺恢复力弄歪,使得它在理论上无法保持稳定。但结果令人大感意外,这辆自行车在行驶中仍可以稳定地前行。
虽然这个问题没有得到解决,但是在2014年,来自美国康奈尔大学的研究人员已经发明出了一种无论怎么倾斜也不会倒下的车子。他们的发明看起来像是自行车与三轮车的合体,而外侧的两个车轮由一个弹簧来调节。如果弹簧完全松开,它跟普通自行车没什么区别,骑手可以通过倾斜和扭转车把来操控。如果弹簧完全绷紧,它就成了一辆三轮车,骑手只能通过扭转车把来操控。而当弹簧处在某个中间的临界点时,这辆车不管怎么倾斜也都倒不了,而且倾斜也不会影响车子的运动情况。另外,骑手试图扭转车把来转向时,却只会造成车子发生倾斜。结果是完全无法操控这辆车子,它只能沿着直线行驶。研究人员希望借此研究出骑手究竟是如何操控自行车并保存稳定的,并能研制出更易操控的自行车。
但这仍是一场艰难的研究。一些研究人员认为,要想理解自行车为什么不倒,不只是要考虑力学问题,也许还要考虑脑科学。人类能用很复杂的但却很直观的方式使得自行车保持稳定。例如在非常低的速度下,我们很容易就意识到,扭转车把没多大用处,相反我们会通过膝盖运动来操控自行车。
我们为什么会这么做?没人知道。自行车的谜团将会继续困扰我们。
玻璃是什么?
如果你去欧洲参观那些古老的大教堂的话,导游们常常会向你兜售这种观点:玻璃其实是液体,会慢慢地往下流,所以这些古老教堂上的玻璃都是上薄下厚的。
但这个观点是错的。玻璃并不是一种流动很缓慢的液体。研究表明,即使经过十几亿年,一块玻璃里也只不过是几个原子会发生移动。那么上薄下厚是怎么回事?事实上,中世纪的玻璃制造工艺还比较粗糙,没办法制造出厚度均匀的玻璃,于是工匠们会把玻璃厚的一边放在底部。
所以,玻璃就是固体了?对,但它却是一种极为特殊的固体。玻璃是一种无定形固体,或者叫做非晶态固体,因为它的微观结构不像晶体固体(例如金属、食盐和冰)那样是有规则的晶格排列,而是一种类似液体那样的不规则排列。另外,很多高分子化合物如聚苯乙烯等也是无定形固体。
但是,科学家并没有完全搞清楚玻璃的一切。例如,玻璃从液体转变为无定形固体的过程仍然令人摸不着头脑。
大多数材料从液体变为固体时,内部的分子会立刻进行重新排列。也就是说,处在液体时,分子可以自由地走动,然后在某个时刻分子会突然发现自己被困住了,于是一种有规则的晶格排列就形成了。
但是从炽热的液体转变为透明的固体的过程中,玻璃分子的运动状态并不是突然发生改变的,而是随着温度的下降而逐渐放缓的,最终形成的无定形固体仍具有类似液体那种不规则的排列,但却具有固体那种坚固的性质。换句话说,在玻璃中,我们遇到了一种奇怪的现象:类似液体那种不规则的排列被神奇地固定了下来。
但它究竟是怎么被固定下来的仍是一个悬而未决的问题。科学家们提出了许许多多理论来解释。
一种可能的原因是与能量有关。根据热力学定律,每一个分子集合总是趋向构成一种所含能量最低的排列。但在玻璃中,不同的分子集合却会构成不同的排列,最终会形成了一个不可调和的不规则排列。
尽管这种解释听起来不错,但是玻璃会形成不规则的排列,真的是因为这是一种能量最低的排列吗?一些科学家猜测,也许这是一种混乱程度最大的排列,因为一个系统的混乱程度总是趋向于达到最大(即热力学第二定律)。这也是一个合理的解释,尽管这个反而很难解释晶体固体中有规则的晶格排列是如何形成的。
而另一些科学家却认为,玻璃所形成的结构,也许是一种极为特殊的晶体。而且有一个证据能证明这个观点,那就是玻璃内有不断重复的几何结构。如果这种观点是正确的,那么玻璃可以真正称得上“晶”莹剔透。
但不管怎样,玻璃为什么是这样的,到今天也没有一个统一认可的解释。
冰为什么很滑?
花样滑冰选手可以在冰面上滑出优美的舞姿,但这里有一个很令科学家困惑的事情——冰为什么很滑?这个问题看似简单,但即使经过了一个多世纪的研究,科学家也没有找到一个明确的答案。
通常的解释是,冰之所以有很低的摩擦系数,是因为鞋与冰面之间有一层薄薄的水,这层水起到了润滑作用。因此,滑冰选手可以穿着滑冰鞋在冰面上自由地滑动,但是在木质地板上却无法滑动。
事实上早在1850年,英国物理学家迈克尔·法拉第就注意到了这层水。他曾向来自伦敦学会的听众们解释,挤压两块冰,两块冰之间的水层会迅速冻结,这样两块冰就冻在一起了。在很多年里,大家都认为冰面的这层水是因压力导致的,因为压力能使冰的熔点下降,促使冰发生融化。
但是,科学家经过计算后发现,即使一个体重超标的人只用一只滑冰鞋站在冰面,产生的压力也不足以明显改变冰的熔点,所以这种解释行不通。相反,一些科学家认为这应该是摩擦生热。当冰刀在冰面上运动时,产生的热量足以融化冰面。
你可能认为事情就是这样了。但是你可能会想起,即使你穿着滑冰鞋站着不动,你也可能滑倒,这说明摩擦并不是真正的原因。1996年,一些研究人员发现,当温度在-22℃以上时,冰的表面上始终有薄薄的一层永远不会凝固的水。所以说,并不是因为压力或者摩擦力产生的这层水,而是冰本身固有的性质。
不过,一位来自新加坡的研究人员认为,冰上的那层水并不是真正的液态水。他把这一层称为“超固体皮肤”,并认为,冰表面上的水分子之间的化学键被拉长了,但是与液态水不同的是,每一个化学键都没有断裂。而且,这种拉长的化学键会最终在表层与接触物之间产生一种静电斥力。这种静电斥力,类似于托起磁悬浮列车中的电磁力或托起气垫船的空气那样,能托起接触物,并大幅度地减少摩擦阻力。
尽管这位研究人员认为他已经完全解决了这个问题。但是,其他的研究人员对此并不信服。在2013年,一位来自日本的研究人员第一次直接观测了这一层结构,并认为这层应该是“准液体”,是冰融化为水时的一种中间状态。
那么,冰的表面究竟是什么?又是怎么来的?看来,这个问题暂时还得不到解决。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。