zoukankan      html  css  js  c++  java
  • 【9309】求Y=X1/3

    Time Limit: 1 second
    Memory Limit: 2 MB

    问题描述
    
    求Y=X1/3次方的值。X由键盘输入(x不等于0,在整型范围内)。利用下列迭代公式计算: 
    yn + 1=2/3*yn+x/(3*yn2)(这里的2是平方),初始值y0=x,误差要求小于ε=10-4次方。 
    
    
        
     
    

    Input

    输入只有一行,一个整数x

    Output

    输出只有一行,输出x和y的值,x按照整数输出,不含小数部分,y的值紧跟其后,加":3x="字样,按照实数形式输出。

    Sample Input1

    8
    

    Sample Output2

    8:3X=2.000000011E+00 (冒号后面无空格)
    
    

    Sample Input2

    0
    

    Sample Output2

    error!
    
    
    
    【题解】
    这题用C++根本写不出来。。
    用的pascal。就是一个迭代过程。
    把前面算出来的值an+1赋给原来参与运算的an.
    然后再用新的an来算an+1即可。
    精度就是an+1-an的值。让他的绝对值小于1e-4就可以了
    记得x==0时判错。
    【代码1】pascal
    program cheng;
    var
    	x:longint;
    	y,y0:real;
    begin 
    	readln(x);
    	if x = 0 then
    		begin
    			writeln('error!');
    			halt;
    		end;
    	y0:=x;
    	repeat
    		y:=y0;
    		y0:=2/3*y0+x/(3*y0*y0);
    	until abs(y-y0) < 1e-4;
    	writeln(x,':3x=',y0);
    end.


    【代码2】C++版(但是不能过测评)
    #include <cstdio>
    
    int t;
    
    double temp,temp2,x;
    
    int main()
    {
    	scanf("%d",&t);
    	x = t;
    	temp = x;
    	temp2 = ((2.0/3.0)*temp) + (x/(3.0*temp*temp));
    	double tt = temp2-temp;
    	if (tt < 0) tt=-tt;
    	while (tt >= 1e-4)
    		{
    			temp = temp2;
    			temp2 = (2.0/3.0)*temp + x/(3.0*temp*temp);
    			tt = temp2-temp;
    			if (tt <0 ) tt=-tt;	
    		}
    	printf("%d:3X=%E",t,temp2);
    	return 0;	
    }


  • 相关阅读:
    Java有关异常处理的小程序
    Java有关多态类的小程序
    Java接口与继承部分的小程序
    Java有关数组的小程序
    Java有关字符串部分的小程序
    Java有关类与对象部分的小程序
    java递归和递推应用的小程序
    第八周进度表
    软件工程概论团队
    课堂结队作业:四则作业网页版
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632358.html
Copyright © 2011-2022 走看看