山东科技大学OJ部分题目记问题详解
实用文档 //////////Problem D://////////Problem D:货币兑换货币兑换 Description 给出人民币对美元、欧元、日元的当日汇率,求给定金额的人民币能兑换成外币的金额, 求给定金额的外币能兑换成人民币的金额。 要计算的外币有三种:美元、欧元、日元。 输入有三行。 第一行依次为美元、欧元、日元外币汇率,用空格分开。汇率用100 外币为单位,精确到 小数点后 4 位,如 668.5200 表示“100 美元=668.5200 人民币”。汇率浮动范围为 (0,10000)。 第二行为外币金额 x,第三行为人民币金额 y。x,y 均为整数,且 0=n)if (m*x=n) s=m*x*0.88; s=m*x*0.88; elseelse s=m*x; s=m*x; printf (“%.2f“,s);printf (“%.2f“,s); } } Problem C:Problem C: 水仙花数水仙花数 Description 如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如: 333 1 +5 +3 =153。 一个整数 x,100max) max=m; max=m; if(m=m;i--) { k=0; for(j=1;j=0;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; while(scanf(“%d %d“, else if(a!=0 else { if(a=0) for(n=0;a[n]=k;n++) a[n+1]=i+(n+1)*j; for(b=0;b=0;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,j=0,k,m,n,a; char s[1224][123]={{0},{0}},b[1234]={0}; for(i=1;strcmp(s[i-1]+j,“END“)!=0;i++) { gets(s[i]); for(j=0;isspace(s[i][j])!=0;j++); for(n=strlen(s[i])-1;isspace(s[i][n])!=0;n--); s[i][n+1]= \0 ; puts(s[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]; while(gets(a)!=NULL) { for(i=0,j=0;a[i]!= \0 ;i++) { if(isalnum(a[i])!=0) { b[j]=a[i]; j++; } } for(i=0,k=0;i0),后面有 M 组输入数据。每组数据以两个正整数m 和 n 开 始,满足 0b?a:b; if(x0) for(i=0;;i++) {if(data-i=0 } else for(i=0;;i--) {if(i-data-1) 实用文档 break; } return i; } int myCeil(double data) { int i; if(data0) for(i=0;;i++) {if(i-data=0 } else for(i=0;;i--) {if(data-i-1) break; } return i; } int main() { double data; while (scanf(“%lf“, } return 0; } Problem C: 求字符串的长度(编程题) Description 编写一个求字符串长度的函数,其原型如下: int strlen(char str[]); 其中 str[]表示待求长度的字符串,返回值是str[]的长度。 注意:主函数已经给出,只需提交strlen()函数及必要的头文件包含命令。 输入为多行。第一行 N0 表示有 N 个测试用例,后面有 N 行,每行包含一个字符串(不超 过 1000 个字符)。 Output 输出为多行,每行对应于一个测试用例。每行的格式为: case i:lenght=j. 其中 i 表示测试用例编号(从 1 开始),j 表示相应的字符串长度。, #include int strlen(char str[]) { int i; for(i=0;str[i]!= \0 ;i++); return i; } int main() { int i,N; 实用文档 char str[1001]; scanf(“%d“, getchar(); gets(str); printf(“case 1:length=%d.“,strlen(str)); for (i=2;i*p2) return 1; else return 0; } int main() { int a, b; scanf(“%d%d“, if(