杭电完成.docx

上传人:b****8 文档编号:23659656 上传时间:2023-05-19 格式:DOCX 页数:63 大小:33.31KB
下载 相关 举报
杭电完成.docx_第1页
第1页 / 共63页
杭电完成.docx_第2页
第2页 / 共63页
杭电完成.docx_第3页
第3页 / 共63页
杭电完成.docx_第4页
第4页 / 共63页
杭电完成.docx_第5页
第5页 / 共63页
点击查看更多>>
下载资源
资源描述

杭电完成.docx

《杭电完成.docx》由会员分享,可在线阅读,更多相关《杭电完成.docx(63页珍藏版)》请在冰豆网上搜索。

杭电完成.docx

杭电完成

组合数

TimeLimit:

1SMemoryLimit:

65536KB

Accepted:

104Submit:

326

Description:

SOS最近做ACM题的时候经常用到组合数C(N,M)就是求M个数中选N个数的组合方案数,他想让你帮他编个小程序好让他COPY过来直接用:

-)

Input:

输入的第一行一个正整数T(T<=10),有T组测试数据第二行~第T+1行,每行有2个正整数N,M(1<=N,M<=200)

Output:

对于每组输入N,M,输出一行,该行有一个数,为C(N,M)值(输出的数据在long范围之内)

InputSample:

2

35

120

OutputSample:

10

20

#include

intmain()

{

longa,b;

intt,n,m,i,s,j,k;

longl;

scanf("%d",&t);

for(i=0;i

{

a=1;b=1;

scanf("%d%d",&n,&m);

if(m-n

for(j=m,k=1;j>=m-n+1;j--,k++)

{

a*=j;b*=k;

for(s=n;s>=2;s--)

if(a%s==0&&b%s==0){a=a/s;b=b/s;}

}

l=a/b;

printf("%ld\n",l);

}

return0;

}

还是A+B

TimeLimit:

2000/1000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

4016AcceptedSubmission(s):

2019

ProblemDescription

读入两个小于10000的正整数A和B,计算A+B。

需要注意的是:

如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。

Input

测试输入包含若干测试用例,每个测试用例占一行,格式为"ABK",相邻两数字有一个空格间隔。

当A和B同时为0时输入结束,相应的结果不要输出。

Output

对每个测试用例输出1行,即A+B的值或者是-1。

SampleInput

121

11211

10882

36643

001

SampleOutput

3

-1

-1

100

#include

usingnamespacestd;

intmain()

{

inta,b,s,k,i;

while(cin>>a>>b>>k)

{

s=1;

if(a==0&&b==0)

break;

for(i=1;i<=k;i++)

s*=10;

if(a%s==b%s)

cout<<"-1"<

else

cout<

}

return0;

}

反正切函数的应用

TimeLimit:

1000MSMemoryLimit:

10000K

TotalSubmissions:

7778Accepted:

2884

Description

反正切函数可展开成无穷级数,有如下公式

(其中0<=x<=1)公式

(1)

使用反正切函数计算PI是一种常用的方法。

例如,最简单的计算PI的方法:

PI=4arctan

(1)=4(1-1/3+1/5-1/7+1/9-1/11+...)公式

(2)

然而,这种方法的效率很低,但我们可以根据角度和的正切函数公式:

tan(a+b)=[tan(a)+tan(b)]/[1-tan(a)*tan(b)]公式(3)

通过简单的变换得到:

arctan(p)+arctan(q)=arctan[(p+q)/(1-pq)]公式(4)

利用这个公式,令p=1/2,q=1/3,则(p+q)/(1-pq)=1,有

arctan(1/2)+arctan(1/3)=arctan[(1/2+1/3)/(1-1/2*1/3)]=arctan

(1)

使用1/2和1/3的反正切来计算arctan

(1),速度就快多了。

我们将公式(4)写成如下形式

arctan(1/a)=arctan(1/b)+arctan(1/c)

其中a,b和c均为正整数。

我们的问题是:

对于每一个给定的a(1<=a<=60000),求b+c的值。

我们保证对于任意的a都存在整数解。

如果有多个解,要求你给出b+c最小的解。

Input

输入文件中只有一个正整数a,其中1<=a<=60000。

Output

输出文件中只有一个整数,为b+c的值。

SampleInput

1

SampleOutput

5

#include

intmain()

{

__int64i,a;

while(scanf("%I64d",&a)!

=EOF)

{

for(i=2*a;;i--)

{

if((i*i+1)%(i-a)==0)

break;

}

printf("%I64d\n",(i*i+1)/(i-a));

}

return0;

}

{A}+{B}

TimeLimit:

10000/5000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

2519AcceptedSubmission(s):

980

ProblemDescription

给你两个集合,要求{A}+{B}.

注:

同一个集合中不会有两个相同的元素.

Input

每组输入数据分为三行,第一行有两个数字n,m(0

Output

针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.

SampleInput

12

1

23

12

1

12

SampleOutput

123

12

#include

#include

#include

usingnamespacestd;

intcmp(constvoid*s1,constvoid*s2)

{

return*(int*)s1-*(int*)s2;

}

intmain()

{

intn,m,i,j,k,a[20000];

while(cin>>n>>m)

{

memset(a,0,sizeof(int));

for(i=0;i

cin>>a[i];

for(j=n;j

cin>>a[j];

qsort(a,m+n,sizeof(int),cmp);

cout<

for(k=1;k

{

if(a[k]==a[k-1])

continue;

else

cout<<""<

}

cout<

}

return0;

}

粗心的物理学家

--------------------------------------------------------------------------------

TimeLimit:

1sMemorylimit:

32M

AcceptedSubmit:

834TotalSubmit:

2892

--------------------------------------------------------------------------------

世界著名的物理学家Albert正在计算的值。

不幸的是,由于这项工作十分枯燥无味,这位伟大的物理学家得到了错误的答案。

由于这一错误,它制造的几颗原子弹失去了控制,射向了五座重要的城市和一片热带雨林……

现在你的任务是帮助这位物理学家纠正这一错误,从而拯救世界。

对于给定的n(n≤5*10^6),计算代数式的值。

输入输出格式

输入数据由多组数据组成。

每组数据一行,仅有一个整数,表示n的值。

对于每组数据,输出代数式的值(小数点后保留12位有效数字)。

样例输入

2

样例输出

1.500000000000

#include

intmain()

{

longi,n;

doubles;

while(scanf("%ld",&n)!

=EOF)

{

s=1;

for(i=2;i<=n;i++)

s+=(double)1/i;

printf("%.12f\n",s);

}

return0;

}

老师的苦恼

--------------------------------------------------------------------------------

TimeLimit:

1sMemorylimit:

32M

AcceptedSubmit:

738TotalSubmit:

1942

--------------------------------------------------------------------------------

Bob写文章时喜欢将英文字母的大小写混用,例如ComputerScience经常被他写成coMpUtErscIeNce,这让他的英文老师十分苦恼,现在请你帮Bob的英文老师写一个程序能够将Bob的文章中的英文字母全部变成小写的。

输入输出格式

输入数据由多组数据组成。

每组数据只有一行,表示Bob写的文章中的一句话,由字母、空格、数字以及各种标点组成,文字长度不超过50个字符。

对于每组数据,输出仅一行,即转换成小写字母之后的结果。

样例输入

weLcOmEtOFZuPC2005!

样例输入

welcometofzupc2005!

#include

#include

usingnamespacestd;

intmain()

{

chara[60];

intj,len;

while(gets(a))

{

len=strlen(a);

for(j=0;j

{

if(a[j]>=65&&a[j]<=90)

a[j]=a[j]+32;

cout<

}

cout<

}

return0;

}

阅读顺序

--------------------------------------------------------------------------------

TimeLimit:

1sMemorylimit:

32M

AcceptedSubmit:

917TotalSubmit:

2424

--------------------------------------------------------------------------------

大多数语言是从左向右读的。

但是,在一些语言中,阅读顺序是从右向左读的。

这给语言交流增加了不少的麻烦。

现在,请你编写一个程序,能够将一从左到右书写的文字自动转成从右向左的顺序。

输入

输入的第一行是一个数字n(n<100),接下来的有n行的文字,由字母、空格、数字以及各种标点组成,每行文字长度不超过200个字符。

输出

将输入的文字转成从右向左的顺序,一行输入对应一行输出。

输入样例

3

amanaplanacanalpanama

Frankly,Idon'tthinkwe'llmakemuch

OK?

输出样例

amanaplanacanalpanama

hcumekamll'ewknihtt'nodI,ylknarF

?

KO

解释

如果不考虑词与词之间的空格,第一句话从左向右读和从右向左读的结果是一样的:

-)

#include

usingnamespacestd;

intmain()

{

intn,i,len,j;

chara[200];

cin>>n;

getchar();

for(j=0;j

{

gets(a);

len=strlen(a);

for(i=len-1;i>=0;i--)

cout<

cout<

}

return0;

}

做减法

--------------------------------------------------------------------------------

TimeLimit:

1sMemorylimit:

32M

AcceptedSubmit:

608TotalSubmit:

2260

--------------------------------------------------------------------------------

乐乐今天刚学减法,老师布置了好多关于减法的家庭作业题。

乐乐可不想把时间都浪费在这重复机械的题目上。

你能帮帮她吗?

输入输出格式

输入数据由多组数据组成。

每组数据只有一行,包含两个整数,用空格分开。

对于每组数据,输出一行,包含两个整数的差。

如果数字超过3位,应从最低位起,按每三位分组。

题目所有输入输出保证在[-2^31,2^31-1]范围内。

样例输入

20001000

样例输出

1,000

#include

#include

usingnamespacestd;

intmain()

{inti,j;

longn,m,s,k[100],t;

while(cin>>n>>m)

{i=0;

s=n-m;

if(s<999)

cout<

else

{

while(s>999)

{k[i++]=s%1000;

s=s/1000;

}

if(s<999)

cout<

for(j=i-1;j>=1;j--)

if(k[j]>=0&&k[j]<=9)cout<<"00"<

elseif(k[j]>=10&&k[j]<=19)cout<<"0"<

elsecout<

if(j==0)

if(k[0]>=0&&k[0]<=9)cout<<"00"<

elseif(k[0]>=10&&k[0]<=19)cout<<"0"<

elsecout<

}

}

return0;

}

不要62

TimeLimit:

1000/1000MS(Java/Others)MemoryLimit:

32768/32768K(Java/Others)

TotalSubmission(s):

2329AcceptedSubmission(s):

691

ProblemDescription

杭州人称那些傻乎乎粘嗒嗒的人为62(音:

laoer)。

杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。

不吉利的数字为所有含有4或62的号码。

例如:

623157341888914

都属于不吉利号码。

但是,61152虽然含有6和2,但不是62连号,所以不属于不吉利数字之列。

你的任务是,对于每次给出的一个牌照区间号,推断出交管局今次又要实际上给多少辆新的士车上牌照了。

Input

输入的都是整数对n、m(0

Output

对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。

SampleInput

1100

00

SampleOutput

80

#include

usingnamespacestd;

inta[1000001];

intmain()

{

inti,n,m;

chars[20];

a[0]=0;

for(i=1;i<=1000000;i++)

{

sprintf(s,"%d",i);

if(!

strstr(s,"4")&&!

strstr(s,"62"))

a[i]=a[i-1]+1;

elsea[i]=a[i-1];

}

while(cin>>m>>n)

{

if(!

m&&!

n)break;

cout<

}

return0;

}

进制转换

TimeLimit:

2000/1000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

3629AcceptedSubmission(s):

2020

ProblemDescription

输入一个十进制数N,将它转换成R进制数输出。

Input

输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16,R<>10)。

Output

为每个测试实例输出转换后的数,每个输出占一行。

如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。

SampleInput

72

2312

-43

SampleOutput

111

1B

-11

#include

#include

usingnamespacestd;

intmain()

{

intn,r,a[100],i,j,m;

while(cin>>m>>r)

{

i=0;

n=abs(m);

while(n!

=0)

{

a[i]=n%r;

n=n/r;

i++;

}

if(m<0)cout<<"-";

for(j=i-1;j>=0;j--)

{

if(a[j]==10)cout<<"A";

elseif(a[j]==11)cout<<"B";

elseif(a[j]==12)cout<<"C";

elseif(a[j]==13)cout<<"D";

elseif(a[j]==14)cout<<"E";

elseif(a[j]==15)cout<<"F";

elsecout<

}

cout<

}

return0;

}

人见人爱A+B

TimeLimit:

2000/1000MS(Java/Others)MemoryLimit:

65536/32768K(Java/Others)

TotalSubmission(s):

3960AcceptedSubmission(s):

2563

ProblemDescription

HDOJ上面已经有10来道A+B的题目了,相信这些题目曾经是大家的最爱,希望今天的这个A+B能给大家带来好运,也希望这个题目能唤起大家对ACM曾经的热爱。

这个题目的A和B不是简单的整数,而是两个时间,A和B都是由3个整数组成,分别表示时分秒,比如,假设A为344556,就表示A所表示的时间是34小时45分钟56秒。

Input

输入数据有多行组成,首先是一个整数N,表示测试实例的个数,然后是N行数据,每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒。

题目保证所有的数据合法。

Output

对于每个测试实例,输出A+B,每个输出结果也是由时分秒3部分组成,同时也要满足时间的规则(即:

分和秒的取值范围在0~59),每个输出占一行,并且所有的部分都可以用32位整数表示。

SampleInput

2

123456

344556122334

#include

#include

usingnamespacestd;

intmain()

{

intn,a[3],b[3],i,j,k,m,s,f,l,t;

cin>>n;

for(i=0;i

{

l=0;t=0;s=0;f=0;m=0;

for(j=0;j<3;j++)

cin>>a[j];

for(k=0;k<3;k++)

cin>>b[k];

m=a[2]+b[2];

if(m>60){m=m-60;t=1;}

f=a[1]+b[1];

if(t)f=f+1;

if(f>60){l=1;f=f-60;}

s=a[0]+b[0];

if(l)

s=s+1;

cout<

}

return0;

}

算菜价

TimeLimit:

1000/1000MS(Java/Others)MemoryLimit:

32768/32768K(Java/Others)

TotalSubmission(s):

2147AcceptedSubmission(s):

1146

ProblemDescription

妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐。

现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵。

Input

输入含有一些数据组,每组数据包括菜种(字串),数量(计量单位不论,一律为double型数)和单价(double型数,表示人民币元数),因此,每组数据的菜价就是数量乘上单价啊。

菜种、数量和单价之间都有空格隔开的。

Output

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1