POJ多例题版

更新时间:2024-04-30 02:08:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

一、数的距离差

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

三、将字符串中的小写字母转换成大写字母 四、最长最短单词 五、计算绩点 六、按要求排序 七、计算多项式的值 八、计算两个分数的和 九、登山

十、计算平均年龄 十一、数圈 十二、放苹果

十三、计算约数的和 十四、冒泡排序

十五、构造新的模运算 十六、最大最小值

十七、最大公约数与最小公倍数 十八、计算素数的和 十九、任意进制间转换 二十、二项式系数

二十一、采药(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 #define N 400 int main () { int a[N],D[N]; inti,n,max,m,min,D_min; scanf(\ for(i=0;iD[i]){ D_min=D[i]; m=a[i]; } } printf(\ return 0; } (二)

#include #include #define N 500 int main(){ int a[N],n,i,m,p,r,s,t; scanf(\ for(i=0;ia[i])

}

m=a[i]; if(p

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

for(i=1;ir){ s=r; t=a[i]; } }

printf(\return 0;

二、按位转换整数到英文单词 题目描述

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

如当输入1024时,输出:one, zero, two, four 输入

输入为一个整数 输出

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

样例输出

two, zero, three, four, five 提示

注意:大家要考虑数据为\的情况,此时如果取对0取对数会出错 例:(一)

#include #define N 200 int main(){ intn,k,j,s; int a[N]; scanf(\ j=0; s=0; while(n!=0){ k=n; n=n/10; a[j]=k; j++; s=s+j; } for(j=s-1;j>0;j--){ switch(a[j]){

}

case 0: printf(\ case 1: printf(\ case 2: printf(\ case 3: printf(\ case 4: printf(\ case 5: printf(\ case 6: printf(\ case 7: printf(\ case 8: printf(\ case 9: printf(\ } }

switch(a[0]){ case 0: printf(\ case 1: printf(\ case 2: printf(\ case 3: printf(\ case 4: printf(\ case 5: printf(\ case 6: printf(\ case 7 : printf(\ case 8 : printf(\ case 9 : printf(\ } return 0;

(二)

#include #define N 500 int main(){ intm,i,a[N],n; scanf(\ i=0; if(m==0) printf(\ else while(m!=0){ a[i]=m; i++; m=m/10; } n=i-1; for(i=n;i>=0;i--){ if(i!=0){ switch(a[i]){ case 0: printf(\ case 1: printf(\ case 2: printf(\

}

case 3: printf(\ case 4: printf(\ case 5: printf(\ case 6: printf(\ case 7 : printf(\ case 8 : printf(\ case 9 : printf(\ } } else{ switch(a[i]){ case 0: printf(\ case 1: printf(\ case 2: printf(\ case 3: printf(\ case 4: printf(\ case 5: printf(\ case 6: printf(\ case 7 : printf(\ case 8 : printf(\ case 9 : printf(\ } } }

return 0;

三、将字符串中的小写字母转换成大写字母 题目描述

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

一个字符串 输出

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

helloworld123Ha 样例输出

HELLOWORLD123HA 例:(一)

#include #define N 200 int main() { int i;

char c,str[N]; gets(str); i=0;

while(str[i]!='\\0') {

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

-1

样例输出

2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-17 Sunday 提示

2000.1.1. 是星期六 #include int type(int);

char week[7][10]={\int year[2]={365,366};

int month[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31}; int main(){ intdays,dayofweek; int i=0,j=0; while(scanf(\ dayofweek=days%7; for(i=2000;days>=year[type(i)];i++){ days-=year[type(i)]; } for(j=0;days>=month[type(i)][j];j++){ days-=month[type(i)][j]; } printf(\ } return 0; }

int type(int m){ if(m%4!=0||(m0==0&&m@0!=0)) return 0; else return 1; }

二十三、爬楼梯 描述

树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数 例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级 也可以第一次走两级,第二次走一级,一共3种方法。 输入

输入包含若干行,每行包含一个正整数N,代表楼梯级数,1<=N<=30 输出

不同的走法数,每一行输入对应一行输出 样例输入 5 8 10 样例输出 8

34 89

#include #include intfibonacci (int n){ if (n > 2)

returnfibonacci(n - 1) + fibonacci(n - 2); else return 1; }

int main(){ int data[20]; int t; int i;

printf (\scanf (\for (i=0; i

printf(\for (i=0; i

printf(\ }

system(\ return 0; }

描述

求两个不超过200位的非负整数的和。 输入

有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出

一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 样例输入

22222222222222222222

33333333333333333333样例输出 55555555555555555555

#include #include

//输入大数,保存在数组中,并将数字字符转成数值,方便计算,同时返回数长度 intget_num( char *str ){ intlen=0; charch ;

while( (ch=getchar()) != '\\n' ) {

if ( ch>'9' || ch< '0' ) //忽略非数字字符 continue ;

str[len++]=ch-'0' ; }

returnlen ; }

Intmain(){

char num1[201], num2[201]; char result[202]={0}; int len1,len2; intlen=0; int x , y ;

len1=get_num( num1 ); len2=get_num( num2 );

len=(len1>len2)?len1:len2; //取大数长度 while ( len>= 0 ) { if ( --len1 < 0 )

x=0; else

x=num1[len1] ; if ( --len2 < 0 )

y=0; else

y=num2[len2] ;

result[len] += (x+y); //对应位相加 if ( result[len] > 9 )//判断是否有进位 { result[len] -= 10 ; result[len-1] += 1 ; }

result[len] += '0' ; //为了方便输出,转换成字符 len -- ; }

if ( result[0] == '0' ) //相加结果高位没有进位,则从第二位输出 printf(\else

printf(\高位有进位,则从第一位输出 system(\ return 0; }

二十五、肿瘤检测 描述

一张CT扫描的灰度图像可以用一个N*N(0

输入第一行包含一个正整数N(0

输出只有一行,该行包含两个正整数,分别为给定图像中肿瘤的面积和周长,用一个空格分开。

样例输入 6

99 99 99 99 99 99 99 99 99 50 99 99 99 99 49 49 50 51 99 50 20 25 52 99 40 50 99 99 99 99 99 99 99 99 99 99 样例输出 9 8

#include #include

int main(intargc, char *argv[]){ intn,temp[101][101],area,cir; inti,j;

area = cir = 0; scanf(\for(i=0;i

scanf(\for(i=0;i

if(i==0||i==(n-1)||j==0||j==(n-1))cir++;

else if(temp[i][j-1]>50||temp[i][j+1]>50||temp[i-1][j]>50||temp[i+1][j]>50)cir++; } } printf(\ system(\ return 0; }

二十六、肿瘤面积 描述

在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘所在的像素点在图片中用0表示。其它肿瘤内和肿瘤外的点都用255表示。现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘上的点)。已知肿瘤的边缘平行于图像的边缘。 输入

只有一个测试样例。第一行有一个整数n,表示正方形图像的边长。其后n行每行有n个整数,取值为0或255。整数之间用一个空格隔开。已知n不大于1000。 输出

输出一行,该行包含一个整数,为要求的肿瘤内的像素点的个数。 样例输入 5

255 255 255 255 255 255 0 0 0 255 255 0 255 0 255 255 0 0 0 255

255 255 255 255 255

样例输出 1提示

如果使用静态数组来表示图片数据,需要将该数组定义成全局变量。 数每行0和255的个数,统计肿瘤边长 #include #include

int main(intargc, char *argv[]) { int n,temp,x,y,num255,num0; inti,j;

num0 = num255 = x = y = 0; scanf(\ for(i=0;i

if(num255==n)num0=num255=0; else{ y++;

if(num0>x)x = num0;

num0 = num255 = 0; } }

printf(\ system(\ return 0; }

描述

在国外,每月的13号和每周的星期5都是不吉利的。特别是当13号那天恰好是星期5时,更不吉利。已知某年的一月一日是星期w,并且这一年一定不是闰年,求出这一年所有13号那天是星期5的月份,按从小到大的顺序输出月份数字。(w=1..7) 输入

输入有一行,即一月一日星期几(w)。(1<=w<=7) 输出

输出有一到多行,每行一个月份,表示该月的13日是星期五。 样例输入 7 样例输出 1 10 提示

1、3、5、7、8、10、12月各有31天 4、6、9、11月各有30天 2月有28天

#include #include

int main(intargc, char *argv[]) {

//dayof13记录每个月的13号是该年的第几天,对7取余,即与余数是相同的星期 // 所求的星期就是 w + (day%7 - 1),若大于7,则减去7

return n*(m/a); }

int main(){ char s[N]; inta,b,c,d; intm,n,t;

while(scanf(\ a=s[0]-'0'; b=s[2]-'0'; c=s[4]-'0'; d=s[6]-'0'; m=lcm(b,d); if(s[3]=='+')

n=a*(m/b)+c*(m/d); else

n=a*(m/b)-c*(m/d); t=gcd(m,n); m=m/t; n=n/t; if(n==0) printf(\else if(m==1){ printf(\ } else{ if(m<0){ printf(\ printf(\ printf(\ } else{ printf(\ printf(\ printf(\ } } }

system(\return 0; }

本文来源:https://www.bwwdw.com/article/xwkg.html

Top