21. for(i=1;i<=8-p;i++) 22. printf(\,s[i-1]); 23. } 24. else 25. { 26. i=0; 27. while(i<=p) 28. { 29. if(s[i]=='0'&&!flag&&i
37 大数分解
成绩: 5 / 折扣: 0.8
2007级在“计算机科学导论”的期末考试中有一道试题。下面请你看看那题目应该如何编写。 从键盘输入的一个大于 1 的整数,通过算法将该整数分解为若干因子的乘积。
输入:
一个正整数。
输出:
分解后的各个因子。 1. 2. 3. 4. 5. 6. 7. 8.
#include
scanf(\,&n); for(i=2;n>1;) { if(n%i==0) {
printf(\,i);n/=i; }
9. else i++; 10. } 11. }
38 回文字符串——递归
成绩: 5 / 折扣: 0.8
有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。 输入: 字符串 输出:
Yes或者No
说明:
如输出Yes,说明输入的字符串是一个回文字符串 输出No,说明输入的字符串不是一个回文字符串 请使用递归算法实现。
1. #include
3. int fun(char str[],int a,int b) 4. {
5. if(str[a]!=str[b]) return 0 ;
6. else if(a==b||a+1==b&&str[a+1]==str[b]) return 1; 7. else if(str[a]==str[b]) return 1&&fun(str,a+1,b-1); 8. }
9. void main() { 10. char str[100]; scanf(\,str); int n; n=strlen(str); 11. switch(fun(str,0,n-1)) 12. { 13. case 1:printf(\);break; 14. case 0:printf(\);break; 15. } 16. }
39 求最大公约数——递归
成绩: 5 / 折扣: 0.8
请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。 = m 当 m<=n 且 n mod m =0 GCD(N,M) = GCD(m,n) 当n 输出: n和m的最大公约数 1. #include 5. return r==0?n:gcd(n,r); 6. } 7. int main() 8. { int m,n; 9. scanf(\,&m,&n); 10. printf(\,gcd(m,n)); 11. return 0; 12. } 40 求序列之和——递归 成绩: 5 / 折扣: 0.8 请使用递归算法求下列序列的前n项之和。 1 + 1/2 - 1/3 + 1/4 -1/5 ...... 输入: n 输出: 序列的前n项和(精确到小数点之后第6位) 1. #include\ 2. int main() 3. {int n; 4. double SUM(int); 5. scanf(\,&n); 6. n==1?printf(\):printf(\,SUM(n)); 7. return 0; 8. } 9. double SUM(int n) 10. {if(n==2) return 1+1.0/n; 11. else if(n%2) return -1.0/n+SUM(n-1); 12. else return SUM(n-1)+1.0/n; 13. } 44. 函数递归 成绩: 10 / 折扣: 0.8 编写一个函数,使用递归算法求满足下述定义的整数序列的第n项。 f( n ) = 1 f(n-1) + f(n-3) f(n-2) + f(n-4) -1 当 n >= 0 且 n <= 4 时 当 n > 4 且n为偶数 时 当 n > 4 且n为奇数 时 其他 函数原型如下: int findf(int n); 参数说明:n 项数;返回值是第n项值。 例如输入:10,输出:8 预设代码 前置代码 view plaincopy to clipboardprint? 1. 2. 3. 4. 5. 6. 7. /* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */ #include int main() { int n,s, findf( int ); scanf(\, &n); 8. s = findf(n); 9. printf(\, s); 10. return 0; 11. } 12. 13. /* PRESET CODE END - NEVER TOUCH CODE ABOVE */ 1. int findf(int n) 2. { 3. int i; 4. if(n>=0&&n<=4) i=1; 5. if(n>4&&n%2==0) i=findf(n-1)+findf(n-3); 6. if(n>4&&n%2==1) i=findf(n-2)+findf(n-4); 7. if(n<0) i=-1; 8. return i; 9. } #include int m,n,a,i,j,s=0; printf(\scanf(\int b[m][n]; if(m>n) { i=m; m=n; n=i; s=1; } int c[m][n]; for(i=0;i for(j=0;j for(a=1;a if(a%2!=0) {c[0][a]=c[0][a-1]+1; for(i=1,j=a-1;i>=0&&i {c[a][0]=c[a-1][0]+1;