山东科技大学OJ部分题目记问题详解
实用文档 //////////Problem D//////////Problem D货币兑换货币兑换 Description 给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额, 求给定金额的外币能兑换成人民币的金额。 要计算的外币有三种美元、欧元、日元。 输入有三行。 第一行依次为美元、欧元、日元外币汇率,用空格分开。汇率用100 外币为单位,精确到 小数点后 4 位,如 668.5200 表示“100 美元668.5200 人民币”。汇率浮动范围为 0,10000。 第二行为外币金额 x,第三行为人民币金额 y。x,y 均为整数,且 0nif m*xn sm*x*0.88; sm*x*0.88; elseelse sm*x; sm*x; printf “.2f“,s;printf “.2f“,s; } } Problem CProblem C 水仙花数水仙花数 Description 如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如 333 1 5 3 153。 一个整数 x,100max maxm; maxm; ifmm;i-- { k0; forj1;j0;m-- printf“d“,a[m]; printf“\n“; } } } //////////Problem F Problem F 辗转相除法辗转相除法最大公约数的算法最大公约数的算法 Description 辗转相除法,也称欧几里得算法,是求最大公约数的算法。 输入为多行,每行有一对非负整数a,b,且 a*b 不会超出 int 类型的数据范围。输入至EOF 结束。 Output 每行输出一对 a,b 的最大公约数和最小公倍数,顺序与输入对应。 从数论上的整除定义出发若a 整除 b(b 除以 a 没有余数),则 b 是 a 的倍数,a 是 b 的 约数,这里要求 b 不为 0。因此 0 是任意整数的倍数,但是0 不能是约数。 include int main { int a,b,c,m,t; whilescanf“d d“, else ifa0 else { ifa0 forn0;a[n]k;n a[n1]in1*j; forb0;b0;j--printf“c“,s[j];} 实用文档 Problem B 去行首行尾的空白符 Description 在 C 语言中,将 ASCII 字符集中的制表符(\t)、回车符(\r)、换行符(\n)、 垂直制表符(\v)、换页符(\f)和空格字符( )称作空白符。 你的任务是读入每行字符串,去掉行首和行尾的连续空白符,但是在任意非空白符中间的 空白符不要去除。 输入为多行,每行为一个串(不超过100 个字符),至某行输入的非空白符仅为“END”结 束。 Output 输出为多行,为每行输入的去掉前后空白符的串。“END”也输出。 include include include int main { int i,j0,k,m,n,a; char s[1224][123]{{0},{0}},b[1234]{0}; fori1;strcmps[i-1]j,“END“0;i { getss[i]; forj0;isspaces[i][j]0;j; fornstrlens[i]-1;isspaces[i][n]0;n--; s[i][n1]\0; putss[i]j; } } /////Problem C/////Problem C 回文回文 输入为多行,到文件末尾结束。每行为一个串,且不会超过1000 个字符,且全部由可显示 的 ASCII 码字符组成。Output 当一个串中的字母和数字部分能够构成一个回文,即输出 “Yes.”;否则输出“No.”。 实用文档 HINT 首先要考虑如何去除空白符(空格、回车、换行、制表符等),标点和各种符号(如 “,“”和“{}”等),并且把串中的英文字符统一大小写,最后才能进行回文判定。 请注意,用 gets和 scanf判断文件尾的方法是不一样的。gets函数的返回值请查阅 C 语言的语法手册。 include include include int main { int i,j,k; char a[1001],b[1001]; whilegetsaNULL { fori0,j0;a[i]\0;i { ifisalnuma[i]0 { b[j]a[i]; j; } } fori0,k0;i0,后面有 M 组输入数据。每组数据以两个正整数m 和 n 开 始,满足 0bab; ifx0 fori0;;i {ifdata-i0 } else fori0;;i-- {ifi-data-1 实用文档 break; } return i; } int myCeildouble data { int i; ifdata0 fori0;;i {ifi-data0 } else fori0;;i-- {ifdata-i-1 break; } return i; } int main { double data; while scanf“lf“, } return 0; } Problem C 求字符串的长度编程题 Description 编写一个求字符串长度的函数,其原型如下 int strlenchar str[]; 其中 str[]表示待求长度的字符串,返回值是str[]的长度。 注意主函数已经给出,只需提交strlen函数及必要的头文件包含命令。 输入为多行。第一行 N0 表示有 N 个测试用例,后面有 N 行,每行包含一个字符串(不超 过 1000 个字符)。 Output 输出为多行,每行对应于一个测试用例。每行的格式为 case ilenghtj. 其中 i 表示测试用例编号(从 1 开始),j 表示相应的字符串长度。, include int strlenchar str[] { int i; fori0;str[i]\0;i; return i; } int main { int i,N; 实用文档 char str[1001]; scanf“d“, getchar; getsstr; printf“case 1lengthd.“,strlenstr; for i2;i*p2 return 1; else return 0; } int main { int a, b; scanf“dd“, if