1、POJ多例题版目录一、数的距离差二、按位转换整数到英文单词三、将字符串中的小写字母转换成大写字母四、最长最短单词 五、计算绩点 六、 按要求排序 七、计算多项式的值 八、计算两个分数的和 九、登山 十、计算平均年龄十一、数圈 十二、放苹果十三、计算约数的和 十四、冒泡排序 十五、构造新的模运算十六 、最大最小值 十七、 最大公约数与最小公倍数 十八、计算素数的和十九、任意进制间转换二十、二项式系数二十一、采药(POJ2733)二十二、日历问题(POJ2964)二十三、爬楼梯(POJ4017)二十四、大整数加法(POJ2981)二十五、肿瘤检测(POJ2677)二十六、肿瘤面积(POJ2713)
2、二十七、不吉利日期(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()定义
3、在stdlib.h中 例:(一) #include #include #define N 400 int main () int aN,DN; int i,n,max,m,min,D_min; scanf(%d,&n); for(i=0;in;i+) scanf(%d,&ai); max=a0; for(i=1;in;i+) if(maxai) max=ai; min=a0; for(i=1;iai) min=ai; for(i=0;in;i+) Di=abs(abs(ai-max)-abs(ai-min); D_min=D0; for(i=1;iDi) D_min=Di; m=ai; pri
4、ntf(%d,m); return 0; (二) #include #include #define N 500 int main() int aN,n,i,m,p,r,s,t; scanf(%d,&n); for(i=0;in;i+) scanf(%d,&ai); p=m=a0; for(i=1;iai) m=ai; if(pai) p=ai; s=abs(abs(a0-p)-abs(a0-m); t=a0; for(i=1;ir) s=r; t=ai; printf(%d,t); return 0; 二、按位转换整数到英文单词题目描述 请把输入整数的每位数字转换成英文。 如当输入1024时
5、,输出:one, zero, two, four 输入 输入为一个整数 输出 按整数每一位输出其英文单词,单词间用逗号加空格分隔,单词由小写字母组成。 样例输入 20345 样例输出 two, zero, three, four, five 提示 注意:大家要考虑数据为0的情况,此时如果取对0取对数会出错 例:(一) #include #define N 200 int main() int n,k,j,s; int aN; scanf(%d,&n); j=0; s=0; while(n!=0) k=n%10; n=n/10; aj=k; j+; s=s+j; for(j=s-1;j0;j-)
6、 switch(aj) case 0: printf(zero,);break; case 1: printf(one,);break; case 2: printf(two,);break; case 3: printf(three,);break; case 4: printf(four,);break; case 5: printf(five,);break; case 6: printf(six,);break; case 7: printf(seven,);break; case 8: printf(eight,);break; case 9: printf(nine,);break
7、; switch(a0) case 0: printf(zero);break; case 1: printf(one);break; case 2: printf(two);break; case 3: printf(three);break; case 4: printf(four);break; case 5: printf(five);break; case 6: printf(six);break; case 7 : printf(seven);break; case 8 : printf(eight);break; case 9 : printf(nine);break; retu
8、rn 0; (二) #include #define N 500 int main() int m,i,aN,n; scanf(%d,&m); i=0; if(m=0) printf(zero); else while(m!=0) ai=m%10; i+; m=m/10; n=i-1; for(i=n;i=0;i-) if(i!=0) switch(ai) case 0: printf(zero);break; case 1: printf(one);break; case 2: printf(two);break; case 3: printf(three);break; case 4: p
9、rintf(four);break; case 5: printf(five);break; case 6: printf(six);break; case 7 : printf(seven);break; case 8 : printf(eight);break; case 9 : printf(nine);break; else switch(ai) case 0: printf(zero);break; case 1: printf(one);break; case 2: printf(two);break; case 3: printf(three);break; case 4: pr
10、intf(four);break; case 5: printf(five);break; case 6: printf(six);break; case 7 : printf(seven);break; case 8 : printf(eight);break; case 9 : printf(nine);break; return 0; 三、将字符串中的小写字母转换成大写字母题目描述 给定一个字符串,将其中所有的小写字母转换成大写字母 输入 一个字符串 输出 将输入的字符串中所有小写字母转换成大写字母后的字符串 样例输入 helloworld123Ha 样例输出 HELLOWORLD123
11、HA 例:(一) #include #define N 200 int main() int i; char c,strN; gets(str); i=0; while(stri!=0) if(stri=a&stri=z) stri=stri-32; i+; puts(str); return 0; 例(二) #include #include #define N 500 int main() char aN; int i,n; scanf(%s,a); n=strlen(a); for(i=0;i=a & ai=z) ai=ai-32; an=0; printf(%s,a); return
12、0; 四、最长最短单词 输入1行单词(不多于200个单词),空格和逗号都是单词间的间隔,试输出第1个最长的单词和第1个最短单词。 如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。 输入 一行单词,空格和逗号都是单词间的间隔 输出 两行输出 第1行,第一个最长的单词 第2行,第一个最短的单词 样例输入 I am studying Programming language C in Nanjing University of Information and Technology 样例输出 Programming #include #include char str4000; char
13、 out200200; int length200; int main(void) gets(str); int i,j=0,k=0,n=strlen(str); for(i=0;in;i+) if(stri= |stri=,) outjk=0; lengthj=strlen(outj); j+; k=0; continue; outjk+=stri; int max=0,min=0; for(i=1;ij;i+) if(lengthmaxlengthi) min=i; puts(outmax); puts(outmin); return 0; 五、计算绩点 题目描述 学校对本科生的成绩施行平
14、均学分绩点制(GPA)。将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。 曾经使用的规定如下: 实际成绩 绩点 90-100 4.0 85-89 3.7 82-84 3.3 78-81 3.0 75-77 2.7 72-74 2.3 68-71 2.0 64-67 1.5 60-63 1.0 60以下 0 1一门课程的学分绩点=该课绩点*该课学分 2总评绩点=所有学科绩点之和/所有课程学分之和 现要求你编写程序求出某人A的总评绩点(GPA)。 输入 第一行 总的课程数n(n10); 第二行 相应课程的学分(两个学分间用空格隔开); 第三行 对应课程的实际得分; 此处输入的所有数字
15、均为整数。 输出 输出有一行,总评绩点,精确到小数点后2位小数。(printf(%.2f,GPA);) 样例输入 5 4 3 4 2 3 91 88 72 69 56 样例输出 2.52 #include #include int main() int n,i; float a10,c10,b10,sum=0,GPA,d; scanf(%d,&n); for(i=0;i=n-1;i+) scanf(%f,&ai); for(i=0;i=90) ci=4.0; else if(bi=85) ci=3.7; else if(bi=82) ci=3.3; else if(bi=78) ci=3.0;
16、 else if(bi=72) ci=2.3; else if(bi=68) ci=2.0; else if(bi=64) ci=1.5; else if(bi=60) ci=1.0; else bi=0; for(i=0;i=n-1;i+) sum+=ai*ci; for(i=0;i=n-1;i+) d+=ai; GPA=sum/d; printf(%.2f,GPA); return 0; 六、 按要求排序 输入 第一行为一个整数N(1=N=1000) 第二行为N个绝对值不超过10000的整数,表示需要排序的序列输出 输出N行,为N个整数按升序排序后的序列样例输入 6 100 201 6 8
17、 10 99 样例输出 6 8 10 99 100 201 提示 这N个数需要随机产生 例:(一) #include #define N 1000 int main() int aN; int n,i,j,temp; scanf(%d,&n); for(i=0;in;i+) scanf(%d,&ai); for(j=0;jn-1;j+) for(i=0;iai+1) temp=ai; ai=ai+1; ai+1=temp; for(i=0;in;i+) printf(%d ,ai); printf(n); return 0; 例(二) #include int main() int i,j,m
18、,n,a1000; scanf(%d,&n); for(i=0;in;i+) scanf(%d,&ai); for(j=0;jn-1;j+) for(i=0;iai+1) m=ai; ai=ai+1; ai+1=m; for(i=0;in;i+) printf(%d ,ai); return 0; 七、计算多项式的值 题目描述 多项式f(x) = ax3 + bx2 + cx + d 输入 输入仅一行,分别是x,及参数a、b、c、d的值,每个数都是双精度浮点数。 输出 输出也仅一行,f(x)的值,保留小数点后7位。 样例输入 2.31 1.2 2 2 3 样例输出 33.0838692 提示
19、使用printf(%.7lf, .)实现保留小数点后7位。 #include int main() double x,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); return 0; 例(二) #include double f(double x,double a,double b,double c,double d); int main() double x,a,b,c,d,e; scanf(%lf %lf %lf %lf %lf,&x,&a,&b,&c,&d
20、); if(x=0.0) printf(input error); else e=f(x,a,b,c,d); printf(%.7lf,e); return 0; double f(double x,double a,double b,double c,double d) double e,p=1.0,g; int i; for(i=0;i3;i+) p=p*x; g=x*x; e=a*p+b*g+c*x+d; return e; 八、计算两个分数的和 题目描述 输入两个分数,形式如1/2,计算它们的和,以分数形式输出 输入 第一行为第一个分数第二行为第二个分数 输出 两个分数的和 样例输入
21、1/2 3/4 样例输出 5/4 #include int main() int x,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(nm) 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); return 0; 九、登山 五一到了,NUIST-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号
22、都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么? 输入 Line 1: N (2 = N = 1000) 景点数 Line 2: N个整数,每个景点的海拔 输出 最多能浏览的景点数 样例输入 8 186 186 150 200 160 130 197 220 样例输出 4 例 #include int f(int a1000,int n); int main() int n,a1000,i,m; scanf(%d,&n); f
23、or(i=0;i0;m-) for(i=1;iai-1) j+; for(i=m-1;in-1;i+) if(aiai+1) j+; bn-m=j; j=1; s=b0; for(i=1;in;i+) if(sbi) s=bi; return s; 十、 计算平均年龄 例:(一) #include int main() int n,i,sum,age; double num; scanf(%d,&n); for(i=0,sum=0;in;i+) scanf(%d,&age); sum+=age; num=(double)sum/n; printf(%.2f,num); return 0; 例(二) #include int main() int n,m,i; float b,a=0.0; scanf(%d,&n); for(i=0;in;i+) scanf(%d,&m); a=a+m; b=a/n; printf(%.2f,b); return 0; 十一、数圈 以1为中心,用2,3,。,n的数字围绕着
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1