目录
7-2 递归求简单交错幂级数的部分和:
7-3 出生年:
7-4 近似求PI:
7-1 递归实现顺序输出整数:
-本题要求实现一个函数,对一个整数进行按位顺序输出。
-本题要求实现一个函数,对一个整数进行按位顺序输出。
-函数接口定义:
void printdigits( int n );
-函数printdigits应将n的每一位数字从高位到低位顺序打印出来,每位数字占一行。
-裁判测试程序样例:
#includevoid printdigits( int n ); int main() { int n; scanf("%d", &n); printdigits(n); return 0; }
-输入样例:
12345
-结尾无空行
-输出样例:
1 2 3 4 5
-解答-
void printdigits( int n ){ if(n<10) printf("%dn",n); else{ printdigits(n/10); printf("%dn",n%10); } } 7-2 递归求简单交错幂级数的部分和:
-本题要求实现一个函数,计算下列简单交错幂级数的部分和:
-f(x,n)=x−x2+x3−x4+⋯+(−1)n−1xn
-函数接口定义:
double fn( double x, int n );
-其中题目保证传入的n是正整数,并且输入输出都在双精度范围内。函数fn应返回上述级数的部分和。建议尝试用递归实现。
-裁判测试程序样例:
#includedouble fn( double x, int n ); int main() { double x; int n; scanf("%lf %d", &x, &n); printf("%.2fn", fn(x,n)); return 0; }
-输入样例:
0.5 12
-输出样例:
0.33
-解答1(函数法)-
double fn( double x, int n){ if( n== 1) return x; else return pow(-1,n-1)*pow(x,n)+fn(x,n-1); }
-解答2(计算找规律法)-
//n=1,f(x,1)=x; //n=2,f(x,2)=x-x*x=x*(1-x); //n=3,f(x,3)=x-x*x+x*x*x=x*(1-x+x*x)=x*(1-x*(1-x)); //即,n=i时,f(x,i)=x*(1-f(x,i-1)); (i>1,i属于N) double fn( double x, int n ){ if(n==1) return x; else return x*(1-fn(x,n-1)); }7-3 出生年:
-以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。
-输入格式:
-输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。
-输出格式:
-根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。
-输入样例1:
1988 4
-输出样例1:
25 2013
-输入样例2:
1 2
-输出样例2:
0 0001
-解答(此处没使用函数)-
#include7-4 近似求PI:int main(){ int bir[4]; int year, n; scanf("%d%d",&year, &n); int i, count = 0; for(i=year; i<3020; i++){//考虑到输入的是出生年份,作为界限的目标年份未知,取i<3020(其实经过检测上界限为3012) count = 1; bir[0] = i/1000; bir[1] = i/100%10; bir[2] = i/10%10; bir[3] = i%10;//转化成数字 if(bir[0] != bir[1] && bir[0] != bir[2] && bir[0] != bir[3]) count++; if(bir[1] != bir[2] && bir[1] != bir[3]) count++; if(bir[2] != bir[3]) count++;//要求各项比较为异时记录数递加 if(count == n) break; } printf("%d %04d", i-year, i); }
-本题要求编写程序,根据下式求π的近似值,直到最后一项小于给定精度eps。
-2π=1+31!+3×52!+3×5×73!+⋯+3×5×⋯×(2×i+1)i!+⋯
-输入格式:
-输入在一行中给出精度eps,可以使用以下语句来读输入:
scanf("%le", &eps);
-输出格式:
-在一行内,按照以下格式输出π的近似值(保留小数点后5位):
PI = 近似值
-输入样例:
1E-5
-输出样例:
PI = 3.14158
-解答-
#includeint main(void){ double i=1; double eps,sum=0,re=1; scanf("%le", &eps); while(re>=eps){ sum = sum + re; re = re * i/(2*i+1); i = i + 1; } sum = sum + re; printf("PI = %.5f",2*sum); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)