POJ多例题版.docx

上传人:b****5 文档编号:7264184 上传时间:2023-01-22 格式:DOCX 页数:51 大小:33.83KB
下载 相关 举报
POJ多例题版.docx_第1页
第1页 / 共51页
POJ多例题版.docx_第2页
第2页 / 共51页
POJ多例题版.docx_第3页
第3页 / 共51页
POJ多例题版.docx_第4页
第4页 / 共51页
POJ多例题版.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

POJ多例题版.docx

《POJ多例题版.docx》由会员分享,可在线阅读,更多相关《POJ多例题版.docx(51页珍藏版)》请在冰豆网上搜索。

POJ多例题版.docx

POJ多例题版

目录

一、数的距离差

二、按位转换整数到英文单词

三、将字符串中的小写字母转换成大写字母

四、最长最短单词

五、计算绩点

六、按要求排序

七、计算多项式的值

八、计算两个分数的和

九、登山

十、计算平均年龄

十一、数圈

十二、放苹果

十三、计算约数的和

十四、冒泡排序

十五、构造新的模运算

十六、最大最小值

十七、最大公约数与最小公倍数

十八、计算素数的和

十九、任意进制间转换

二十、二项式系数

二十一、采药(POJ2733)

二十二、日历问题(POJ2964)

二十三、爬楼梯(POJ4017)

二十四、大整数加法(POJ2981)

二十五、肿瘤检测(POJ2677)

二十六、肿瘤面积(POJ2713)

二十七、不吉利日期(POJ2723)

二十八、八进制到十进制(POJ2735)

二十九、分解因数(POJ2749)

三十、垂直直方图(POJ2800)

三十一、取石子游戏(POJ1067)

三十二、分数加减法(POJ3979)

一.数的距离差

给定一组正整数,其中的最大值和最小值分别为max和min,其中的一个数x到max和min的距离差D定义为

abs(abs(x-max)-abs(x-min))。

其中,abs()表示求一个数的绝对值

输入

输入第一行为整数n,剩余n行每行一个正整数。

输出

输出仅一行,它的值为使得距离差D最小的x。

样例输入

5

3

1

7

5

9

样例输出

提示

函数abs()定义在stdlib.h中

例:

(一)

#include

#include

#defineN400

intmain(){

inta[N],D[N];

inti,n,max,m,min,D_min;

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

max=a[0];

for(i=1;i

if(max

max=a[i];

}

min=a[0];

for(i=1;i

if(min>a[i])

min=a[i];

}

for(i=0;i

D[i]=abs(abs(a[i]-max)-abs(a[i]-min));

}

D_min=D[0];

for(i=1;i

if(D_min>D[i]){

D_min=D[i];

m=a[i];

}

}

printf("%d",m);

return0;

}

(二)

#include

#include

#defineN500

intmain(){

inta[N],n,i,m,p,r,s,t;

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

}

p=m=a[0];

for(i=1;i

if(m>a[i])

m=a[i];

if(p

p=a[i];

}

s=abs(abs(a[0]-p)-abs(a[0]-m));

t=a[0];

for(i=1;i

r=abs(abs(a[i]-p)-abs(a[i]-m));

if(s>r){

s=r;

t=a[i];

}

}

printf("%d",t);

return0;

}

二、按位转换整数到英文单词

题目描述

请把输入整数的每位数字转换成英文。

如当输入1024时,输出:

one,zero,two,four

输入

输入为一个整数

输出

按整数每一位输出其英文单词,单词间用逗号加空格分隔,单词由小写字母组成。

样例输入

20345

样例输出

two,zero,three,four,five

提示

注意:

大家要考虑数据为"0"的情况,此时如果取对0取对数会出错

例:

(一)

#include

#defineN200

intmain(){

intn,k,j,s;

inta[N];

scanf("%d",&n);

j=0;

s=0;

while(n!

=0){

k=n%10;

n=n/10;

a[j]=k;

j++;

s=s+j;

}

for(j=s-1;j>0;j--){

switch(a[j]){

case0:

printf("zero,");break;

case1:

printf("one,");break;

case2:

printf("two,");break;

case3:

printf("three,");break;

case4:

printf("four,");break;

case5:

printf("five,");break;

case6:

printf("six,");break;

case7:

printf("seven,");break;

case8:

printf("eight,");break;

case9:

printf("nine,");break;

}

}

switch(a[0]){

case0:

printf("zero");break;

case1:

printf("one");break;

case2:

printf("two");break;

case3:

printf("three");break;

case4:

printf("four");break;

case5:

printf("five");break;

case6:

printf("six");break;

case7:

printf("seven");break;

case8:

printf("eight");break;

case9:

printf("nine");break;

}

return0;

}

(二)

#include

#defineN500

intmain(){

intm,i,a[N],n;

scanf("%d",&m);

i=0;

if(m==0)

printf("zero");

else

while(m!

=0){

a[i]=m%10;

i++;

m=m/10;

}

n=i-1;

for(i=n;i>=0;i--){

if(i!

=0){

switch(a[i]){

case0:

printf("zero");break;

case1:

printf("one");break;

case2:

printf("two");break;

case3:

printf("three");break;

case4:

printf("four");break;

case5:

printf("five");break;

case6:

printf("six");break;

case7:

printf("seven");break;

case8:

printf("eight");break;

case9:

printf("nine");break;

}

}

else{

switch(a[i]){

case0:

printf("zero");break;

case1:

printf("one");break;

case2:

printf("two");break;

case3:

printf("three");break;

case4:

printf("four");break;

case5:

printf("five");break;

case6:

printf("six");break;

case7:

printf("seven");break;

case8:

printf("eight");break;

case9:

printf("nine");break;

}

}

}

return0;

}

三、将字符串中的小写字母转换成大写字母

题目描述

给定一个字符串,将其中所有的小写字母转换成大写字母

输入

一个字符串

输出

将输入的字符串中所有小写字母转换成大写字母后的字符串

样例输入

helloworld123Ha

样例输出

HELLOWORLD123HA

例:

(一)

#include

#defineN200

intmain(){

inti;

charc,str[N];

gets(str);

i=0;

while(str[i]!

='\0'){

if(str[i]>='a'&&str[i]<='z'){

str[i]=str[i]-32;

}

i++;

}

puts(str);return0;

}

(二)

#include

#include

#defineN500

intmain(){

chara[N];

inti,n;

scanf("%s",a);

n=strlen(a);

for(i=0;i

if(a[i]>='a'&&a[i]<='z')

a[i]=a[i]-32;

}

a[n]='\0';

printf("%s",a);

return0;

}

四、最长最短单词

输入1行单词(不多于200个单词),空格和逗号都是单词间的间隔,试输出第1个最长的单词和第1个最短单词。

如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。

输入

一行单词,空格和逗号都是单词间的间隔

输出

两行输出

第1行,第一个最长的单词

第2行,第一个最短的单词

样例输入

IamstudyingProgramminglanguageCinNanjingUniversityofInformationandTechnology

样例输出

Programming

#include

#includecharstr[4000];

charout[200][200];

intlength[200];

intmain(void){

gets(str);

inti,j=0,k=0,n=strlen(str);

for(i=0;i

if(str[i]==''||str[i]==','){

out[j][k]='\0';

length[j]=strlen(out[j]);

j++;

k=0;

continue;

}

out[j][k++]=str[i];

}

intmax=0,min=0;

for(i=1;i

if(length[max]

max=i;

if(length[min]>length[i])

min=i;

}

puts(out[max]);

puts(out[min]);

return0;

}

五、计算绩点

题目描述

学校对本科生的成绩施行平均学分绩点制(GPA)。

将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。

曾经使用的规定如下:

实际成绩绩点

90-1004.0

85-893.7

82-843.3

78-813.0

75-772.7

72-742.3

68-712.0

64-671.5

60-631.0

60以下0

1.一门课程的学分绩点=该课绩点*该课学分

2.总评绩点=所有学科绩点之和/所有课程学分之和

现要求你编写程序求出某人A的总评绩点(GPA)。

输入

第一行总的课程数n(n<10);

第二行相应课程的学分(两个学分间用空格隔开);

第三行对应课程的实际得分;

此处输入的所有数字均为整数。

输出

输出有一行,总评绩点,精确到小数点后2位小数。

(printf("%.2f",GPA);)

样例输入

5

43423

9188726956

样例输出

2.52

#include

#include

intmain(){

intn,i;

floata[10],c[10],b[10],sum=0,GPA,d;

scanf("%d",&n);

for(i=0;i<=n-1;i++)

scanf("%f",&a[i]);

for(i=0;i<=n-1;i++){

scanf("%f",&b[i]);

if(b[i]>=90)

c[i]=4.0;

elseif(b[i]>=85)

c[i]=3.7;

elseif(b[i]>=82)

c[i]=3.3;

elseif(b[i]>=78)

c[i]=3.0;

elseif(b[i]>=72)

c[i]=2.3;

elseif(b[i]>=68)

c[i]=2.0;

elseif(b[i]>=64)

c[i]=1.5;

elseif(b[i]>=60)

c[i]=1.0;

elseb[i]=0;

}

for(i=0;i<=n-1;i++)

sum+=a[i]*c[i];

for(i=0;i<=n-1;i++)

d+=a[i];

GPA=sum/d;

printf("%.2f",GPA);

return0;

}

六、按要求排序

输入

第一行为一个整数N(1<=N<=1000)

第二行为N个绝对值不超过10000的整数,表示需要排序的序列

输出

输出N行,为N个整数按升序排序后的序列样例输入

6

100201681099

样例输出

681099100201

提示

这N个数需要随机产生

例:

(一)

#include

#defineN1000

intmain(){

inta[N];

intn,i,j,temp;

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

}

for(j=0;j

for(i=0;i

if(a[i]>a[i+1]){

temp=a[i];

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

a[i+1]=temp;

}

}

}

for(i=0;i

printf("%d",a[i]);

printf("\n");

return0;

}

(二)

#include

intmain(){

inti,j,m,n,a[1000];

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

}

for(j=0;j

for(i=0;i

if(a[i]>a[i+1]){

m=a[i];

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

a[i+1]=m;

}

}

}

for(i=0;i

printf("%d",a[i]);

}

return0;

}

七、计算多项式的值

题目描述

多项式f(x)=ax3+bx2+cx+d

输入

输入仅一行,分别是x,及参数a、b、c、d的值,每个数都是双精度浮点数。

输出

输出也仅一行,f(x)的值,保留小数点后7位。

样例输入

2.311.2223

样例输出

33.0838692

提示

使用printf("%.7lf",...)实现保留小数点后7位。

#include

intmain(){

doublex,a,b,c,d,y;

scanf("%lf%lf%lf%lf%lf",&x,&a,&b,&c,&d);

y=a*x*x*x+b*x*x+c*x+d;

printf("%.7lf",y);

return0;

}

(二)

#include

doublef(doublex,doublea,doubleb,doublec,doubled);

intmain(){

doublex,a,b,c,d,e;

scanf("%lf%lf%lf%lf%lf",&x,&a,&b,&c,&d);

if(x==0.0)

printf("inputerror");

else{

e=f(x,a,b,c,d);

printf("%.7lf",e);

}

return0;

}

doublef(doublex,doublea,doubleb,doublec,doubled){

doublee,p=1.0,g;

inti;

for(i=0;i<3;i++){

p=p*x;

}

g=x*x;

e=a*p+b*g+c*x+d;

returne;

}

八、计算两个分数的和

题目描述

输入两个分数,形式如1/2,计算它们的和,以分数形式输出

输入

第一行为第一个分数第二行为第二个分数

输出

两个分数的和

样例输入

1/2

3/4

样例输出

5/4

#include

intmain(){

intx,y,a,b,m,n,temp,r,p,t,z;

scanf("%d/%d",&x,&y);

scanf("%d/%d",&a,&b);

m=x*b+y*a;z=m;

n=y*b;t=n;

if(n

temp=n;

n=m;

m=temp;

}

while(m!

=0){

r=n%m;

n=m;

m=r;p=n;

}

printf("%d/%d",z/p,t/p);

return0;

}

九、登山

五一到了,NUIST-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。

同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。

队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?

输入

Line1:

N(2<=N<=1000)景点数

Line2:

N个整数,每个景点的海拔

输出

最多能浏览的景点数

样例输入

8

186186150200160130197220

样例输出

4

#include

intf(inta[1000],intn);

intmain(){

intn,a[1000],i,m;

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

}

m=f(a,n);

printf("%d",m);

return0;

}

intf(inta[1000],intn){

inti,j=1,s,m,b[1000];

for(m=n;m>0;m--){

for(i=1;i

if(a[i]>a[i-1]){

j++;

}

for(i=m-1;i

if(a[i]

j++;

}

}

}

b[n-m]=j;

j=1;

}

s=b[0];

for(i=1;i

if(s

s=b[i];

}

}

returns;

}

十、计算平均年龄

例:

(一)

#includeintmain(){

intn,i,sum,age;

doublenum;

scanf("%d",&n);

for(i=0,sum=0;i

scanf("%d",&age);

sum+=age;

}

num=(double)sum/n;

printf("%.2f",num);

return0;

}

(二)

#include

intmain(){

intn,m,i;

floatb,a=0.0;

scanf("%d",&n);

for(i=0;i

scanf("%d",&m);

a=a+m;

}

b=a/n;

printf("%.2f",b);

return0;

}

十一、数圈

以1为中心,用2,3,。

,n的数字围绕着

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

当前位置:首页 > 农林牧渔 > 林学

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

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