end.
彩票摇奖(LOTTERY.PAS)
【问题描述】
为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。
该彩票的规则是:
(1)每张彩票上印有7个各不相同的号码,且这些号码的取指范围为1~33。
(2)每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。
(3)共设置7个奖项,特等奖和一等奖至六等奖。
兑奖规则如下:
特等奖:
要求彩票上7个号码都出现在中奖号码中。
一等奖:
要求彩票上有6个号码出现在中奖号码中。
二等奖:
要求彩票上有5个号码出现在中奖号码中。
三等奖:
要求彩票上有4个号码出现在中奖号码中。
四等奖:
要求彩票上有3个号码出现在中奖号码中。
五等奖:
要求彩票上有2个号码出现在中奖号码中。
六等奖:
要求彩票上有1个号码出现在中奖号码中。
注:
兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。
例如,中奖号码为2331114191718,则彩票1289231167由于其中有两个号码(23和1)出现在中奖号码中,所以该彩票中了五等奖。
现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。
输入文件(LOTTERY.IN):
输入文件的第一行只有一个自然数N≤1000,表示小明买的彩票张数;第二行存放了7个介于1和33之间的自然数,表示中奖号码;在随后的N行中每行都有7个介于1和33之间的自然数,分别表示小明所买的N张彩票。
输出文件(LOTTERY.OUT):
依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。
输入输出样例:
【输入样例】LOTTERY.IN
2
2331114191718
1289231167
11710212931
【输出样例】LOTTERY.OUT
0000011
彩票摇奖(LOTTERY.PAS)
【问题描述】
为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。
该彩票的规则是:
(1)每张彩票上印有7个各不相同的号码,且这些号码的取指范围为1~33。
(2)每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。
(3)共设置7个奖项,特等奖和一等奖至六等奖。
兑奖规则如下:
特等奖:
要求彩票上7个号码都出现在中奖号码中。
一等奖:
要求彩票上有6个号码出现在中奖号码中。
二等奖:
要求彩票上有5个号码出现在中奖号码中。
三等奖:
要求彩票上有4个号码出现在中奖号码中。
四等奖:
要求彩票上有3个号码出现在中奖号码中。
五等奖:
要求彩票上有2个号码出现在中奖号码中。
六等奖:
要求彩票上有1个号码出现在中奖号码中。
注:
兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。
例如,中奖号码为2331114191718,则彩票1289231167由于其中有两个号码(23和1)出现在中奖号码中,所以该彩票中了五等奖。
现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。
输入文件(LOTTERY.IN):
输入文件的第一行只有一个自然数N≤1000,表示小明买的彩票张数;第二行存放了7个介于1和33之间的自然数,表示中奖号码;在随后的N行中每行都有7个介于1和33之间的自然数,分别表示小明所买的N张彩票。
输出文件(LOTTERY.OUT):
依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。
输入输出样例:
【输入样例】LOTTERY.IN
2
2331114191718
1289231167
11710212931
【输出样例】LOTTERY.OUT
0000011
var
a:
array[1..33,0..1000]ofboolean;
b:
array[0..7]oflongint;
n,i,j,u,s:
longint;
begin
readln(n);
fori:
=0tondo
forj:
=1to7do
begin
read(u);
a[u,i]:
=true;
end;
fori:
=1tondo
begin
forj:
=1to33do
ifa[j,0]thenifa[j,i]theninc(s);
inc(b[s]);
s:
=0;
end;
fori:
=7downto1do
write(b[i],'');
end.
贪污排名(Rank.pas\c\cpp)
【题目描述】
党的十七大热烈召开,胡书记发表了热情洋溢的讲话,其中一个内容是腐败问题,胡书记强调共产党与贪污腐败水火不容,体现了反腐倡廉的决心。
2007年的确是不平凡的一年,尤其在反腐败问题上,确定做了不少工作,抓了N个腐败分子,每抓一个贪官都要求他报出自己的财富,用一个整数表示,胡书记每抓一个都想知道这个贪官在已经抓获的贪官中按照财富排第几名。
党把这个光荣的任务交给了你。
Input
输入文件Rank.in第一行输入一个整数N,表示今年抓获贪官的数量。
接下来N行,每行一个整数,表示按照今年被抓获的顺序给出这N个贪官的财富。
Output
输出文件Rank.out输出N行,第i行表示第i个贪官的财富在1-i个贪官中排第几位。
SampleInput
6
78
24
68
40
39
89
SampleOutput
1
2
2
3
4
1
Hint
【数据说明】
100%的数据N<=45000,财富互不相同且不超过2*10^9(虽然现实中可能不止)
30%的数据N<=8000
Source
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·var
s:
array[1..45000]oflongint;
a,b:
array[1..45000,1..2]oflongint;
n,i,j,k,t,ss:
longint;
begin
readln(n);
readln(s[1]);
writeln('1');
fori:
=2tondobegin
readln(s[i]);
t:
=s[i];j:
=1;ss:
=0;
whilej<>0dobegin
ift>s[j]thenbegin
a[j,1]:
=a[j,1]+1;
k:
=j;j:
=b[j,1];
end
elsebegin
ss:
=ss+a[j,1]+1;
a[j,2]:
=a[j,2]+1;
k:
=j;j:
=b[j,2];
end;
end;
ift>s[k]thenb[k,1]:
=ielseb[k,2]:
=i;
writeln(ss+1);
end;
end.
所谓丑数,就是指那些因子只含2,3,5的数。
1,2,3,4,5,6,8,9,10,12,15是最前面的11个丑数。
为了方便起见,把1也看作是丑数。
请你编写一个程序,输入n,n<3000,寻找并打印第n个丑数。
如输入:
11
输出:
15
constmaxn=3000;
mark:
array[1..3]ofinteger=(2,3,5);
varI,j,n:
longint;min:
real;
p:
array[1..3]oflongint;
ugly:
array[1..maxn]ofreal;
beginwrite(‘inputn:
’);readln(n);
ugly[1]:
=1;
forI:
=1to3dop[I]:
=1;
forI:
=2tondo
beginmin:
=ugly[p[1]]*mark[1];
forj:
=2to3do
ifugly[p[j]]*mark[j]=ugly[p[j]]*mark[j];ugly[I]:
=min;
forj:
=1to3do
ifugly[p[j]]*mark[j]=minthenp[j]:
=p[j]+1;
end;
writeln(ugly[n]:
0:
0);
readln
end.
输入40输出144输入2999输出278628139010
输入200输出16200输入1500输出859963392
锁妖塔的建造很特别,塔总共有n层,但是高度却不相同,这造成了小A爬过每层的时间也不同。
小A会用仙术,每用一次可以让他向上跳一层或两层,但是每次跳跃后小A都将用完灵力,必须爬过至少一层才能再次跳跃。
小A想用最短的时间爬到塔顶,可是他不能找到时间最短的方案。
所以请你帮他找到一个时间最短的方案让他爬到塔顶,小A只关心时间,所以你只要告诉他最短时间是多少就可以了。
[输入格式]tower.in
第一行一个整数n(n<=10000),表示塔的层数。
接下来的n行每行一个整数(<=100),表示从下往上爬每层所需的时间。
[输出格式]tower.out
一个数,表示最短时间。
[样例输入]
5
3
5
1
8
4
[样例输出]
1
[数据规模]
对20%的数据,n<=10
对40%的数据,n<=100
对60%的数据,n<=5000
对100%的数据,n<=10000
varn,i:
longint;
a:
array[1..10000]oflongint;
f:
array[-1..10000,1..2]oflongint;
functionmin(a,b:
longint):
longint;
begin
ifa=aelsemin:
=b;
end;
begin
ssign(input,'tower.in');reset(input);
assign(output,'tower.out');rewrite(output);
readln(n);
fori:
=1tondoreadln(a[i]);
f[0,1]:
=0;f[0,2]:
=0;f[-1,1]:
=0;f[-1,2]:
=0;
fori:
=1tondobegin
f[i,1]:
=min(f[i-1,2],f[i-2,2]);
f[i,2]:
=min(f[i-1,1],f[i-1,2])+a[i];
end;
writeln(min(f[n,1],f[n,2]));
close(input);close(output);
end.
输入6
3
5
4
8
2
7输出6
输入10
2
8
3
1
4
9
7
5
6
4
输出12
输入9
3
5
4
8
2
6
7
5
8输出11
输入15
4
5
6
3
8
12
11
10
9
8
13
7
10
9
11输出36