zoukankan      html  css  js  c++  java
  • 求奇数和、最大公约数和最小公倍数、兔子繁衍问题、求整数的位数及各位数字之和、二分法求多项式单根

    7-25 求奇数和 (15 分)

    本题要求计算给定的一系列正整数中奇数的和。

    输入格式:
    输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。

    输出格式:
    在一行中输出正整数序列中奇数的和。

    输入样例:

    8 7 4 3 70 5 6 101 -1
    

    输出样例:

    116
    
    #include <stdio.h>
    int main()
    {
    	int num,sam;
    	for(int i =0;;i++){
    		scanf("%d",&num);
    		if(num<=0){
    			printf("%d
    ",sam);
    			break;
    		}else if(num%2 !=0){
    			sam =sam+num;
    		}
    	}
    	return 0;
    }
    

    7-26 最大公约数和最小公倍数 (15 分)

    本题要求两个给定正整数的最大公约数和最小公倍数。

    输入格式:
    输入在一行中给出两个正整数M和N(≤1000)。

    输出格式:
    在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

    输入样例:

    511 292
    

    输出样例:

    73 2044
    
    #include <stdio.h>
    int main()
    {
    	int a,b,c,d,p;
    	scanf("%d %d",&a,&b);
    	if(a<b){
    		c=a;
    		a=b;
    		b=c;
    	}
    	p=a*b;
    	while(b!=0){
    		d=a%b;
    		a=b;
    		b=d;
    	}
    	printf("%d %d",a,p/a);
    	return 0;
    }
    

    7-27 兔子繁衍问题 (15 分)

    一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

    输入格式:
    输入在一行中给出一个不超过10000的正整数N。

    输出格式:
    在一行中输出兔子总数达到N最少需要的月数。

    输入样例:

    30
    

    输出样例:

    9
    
    #include <stdio.h>
    int sax();
    int sax(int n){
    	if(n==1||n==2){
    		return 1;
    	}
    	else{
    		return sax(n-2)+sax(n-1);
    	}
    }
    int main()
    {
    	int number,i;
    	scanf("%d",&number);
    	for(i=1;;i++){
    		if(sax(i)>=number){
    			printf("%d
    ",i);
    			break;
    		}
    	}
    	return 0;
    }
    

    7-28 求整数的位数及各位数字之和 (15 分)

    对于给定的正整数N,求它的位数及其各位数字之和。

    输入格式:
    输入在一行中给出一个不超过10
    ​9
    ​​ 的正整数N。

    输出格式:
    在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

    输入样例:

    321
    

    输出样例:

    3 6
    
    #include <stdio.h>
    
    int main()
    {
    	int number,a=0,b=0;
    	scanf("%d",&number);
    	while(number){
    		a=a+number%10;
    		number /= 10;
    		b++;
    	}
    	printf("%d %d
    ",b,a);
    	return 0;
    }
    

    7-29 二分法求多项式单根 (20 分)

    二分法求函数根的原理为:如果连续函数f(x)在区间[a,b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f®=0。

    二分法的步骤为:

    检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2;否则
    如果f(a)f(b)<0,则计算中点的值f((a+b)/2);
    如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根;否则
    如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2,b],令a=(a+b)/2,重复循环;
    如果f((a+b)/2)与f(b)同号,则说明根在区间[a,(a+b)/2],令b=(a+b)/2,重复循环。
    本题目要求编写程序,计算给定3阶多项式f(x)=a3*​x^​3 +a​2 * x^​2+a1 *​​ x+a​0,在给定区间[a,b]内的根。

    输入格式:
    输入在第1行中顺序给出多项式的4个系数a​3、a​2、a​1、a​0​​ ,在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。

    输出格式:
    在一行中输出该多项式在该区间内的根,精确到小数点后2位。

    输入样例:

    3 -1 -3 1
    -0.5 0.5
    

    输出样例:

    0.33
    
    #include <stdio.h>
    #include <math.h>
    double a3,a2,a1,a0;
    double f(double x){
    	return a3*pow(x,3)+a2*pow(x,2)+a1*pow(x,1)+a0;
    }
    int main()
    {
    	double m,n;
    	scanf("%lf %lf %lf %lf",&a3,&a2,&a1,&a0);
    	scanf("%lf %lf",&m,&n);
    	while(f(m)*f(n)<0 && n-m >0.01){
    		double j;
    		j = (m+n)/2;
    		if(f(j)==0){
    			m = n = j;
    		}else if(f(j)*f(n)<0){
    			m=j;
    		}else{
    			n=j;
    		}
    	}
    	if(f(m)==0){
    		printf("%.2f",m);
    	}else if(f(n)==0){
    		printf("%.2f",n);
    	}else{
    		printf("%.2f",(m+n)/2);
    	}
    	return 0;
    }
    
    欢迎查阅
  • 相关阅读:
    luogu P1833 樱花 看成混合背包
    luogu P1077 摆花 基础记数dp
    luogu P1095 守望者的逃离 经典dp
    Even Subset Sum Problem CodeForces
    Maximum White Subtree CodeForces
    Sleeping Schedule CodeForces
    Bombs CodeForces
    病毒侵袭持续中 HDU
    病毒侵袭 HDU
    Educational Codeforces Round 35 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/gh110/p/11892804.html
Copyright © 2011-2022 走看看