POJ简洁版.docx

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

POJ简洁版.docx

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

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;

}

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

题目描述

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

如当输入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;

}

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

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

输入

一个字符串

输出

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

样例输入

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;

}

四、最长最短单词

输入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;

}

七、计算多项式的值

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

输入

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

输出

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

样例输入

2.311.2223

样例输出

33.0838692

提示

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

#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;

}

十、计算平均年龄

#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的数字围绕着中心输出一个数圈,若n=4

78910

61211

54312

16151413

输入

一个整数n(1<=n<=10)

输出

一个数圈

样例输入

5

样例输出

2122232425

2078910

1961211

1854312

1716151413

#include

#defineN10

intmain(){

intnum[N][N];

intcircle=2,row,column,n,i=1,j;//circl为每转半圈的数字个数

scanf("%d",&n);

/*确定开始的那个1的位置*/

if(n%2)

row=column=n/2;

else

row=column=n/2-1;

num[column][row]=i++;

num[column][++row]=i++;

while(circle<=n){

j=1;

while(j<=circle-1){

/**当circle为奇偶数时,行的增减不一样**/

if(circle%2)

num[--column][row]=i++;

else

num[++column][row]=i++;

j++;

}

circle++;

j=1;

while(j<=circle-1){/*同上**/

if(circle%2)

num[column][--row]=i++;

else

num[column][++row]=i++;

j++;

}

}

for(i=0;i

for(j=0;j

printf("%3d",num[i][j]);

printf("\n");

}

return0;

}

十二、放苹果

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?

(用K表示)5,1,1和1,5,1是同一种分法。

输入

第一行是测试数据的数目t(0<=t<=20)。

以下每行均包含二个整数M和N,以空格分开。

1<=M,N<=10。

输出

对输入的每组数据M和N,用一行输出相应的K。

样例输入

173

样例输出

8

#include

intf(intm,intn){

if(m==1||n==1){

return1;

}elseif(m==n){

return1+f(m,m-1);

}elseif(m

returnf(m,m);

}elseif(m>n){

returnf(m,n-1)+f(m-n,n);

}

return0;

}

intmain(){

intt(0);

scanf("%d",&t);

for(inti=0;i

intm(0),n(0);

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

printf("%d\n",f(m,n));

}

return0;

}

十三、计算约数的和

给你一个数字求它的所有约数的和。

比如12,约数有1,2,3,4,6,12加起来是28

现在给你一个数字I。

(1<=I<=1,000)

输入一个数字I

输出约数之和样例输入

12

样例输出

28

#include

intmain(){

inti,m,sum;

scanf("%d",&m);

for(i=1,sum=0;i

if(m%i==0)

sum+=i;

}

printf("%d",sum);

return0;

}

十四、冒泡排序

#include

#defineN5

intmain(){

inta[N];

inti,j,temp;

for(i=0;i

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

for(j=0;j<=N-2;j++){

for(i=0;i

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

temp=a[i];

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

a[i+1]=temp;

}

}

}

printf("\n");

for(i=0;i

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

printf("\n");

return0;

}

十五、构造新的模运算

给定整数a,b,n,要求计算(a^b)modn

输入多组数据,每组数据一行,为三个用空格隔开的整数a,b,n

1<=a<=40,0<=b<=3,1<=n<=500

输出每组数据输出一行,为所求值

样例输入

235

224

样例输出

3

0

#include

intmain(){

inta,b,n;

while(scanf("%d%d%d\n",&a,&b,&n)!

=EOF){

printf("%d\n",(int)(pow(a,b))%n);

}

return0;

}

十六、最大最小值

#include

#defineN100

intmain(){

intn,i,max,min;

inta[N];

scanf("%d",&n);

for(i=0;i

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

}

max=a[0];min=a[0];

for(i=1

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

当前位置:首页 > 成人教育 > 远程网络教育

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

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