Root of the Problem

Root of the Problem

时间: 1ms        内存:64M

描述:

Given positive integers B and N, find an integer A such that AN is as close as possible to B. (The result A is an approximation to the Nth root of B.) Note that AN may be less than, equal to, or greater than B.

输入:

The input consists of one or more pairs of values for B and N. Each pair appears on a single line, delimited by a single space. A line specifying the value zero for both B and N marks the end of the input. The value of B will be in the range 1 to 1,000,000 (inclusive), and the value of N will be in the range 1 to 9 (inclusive).

输出:

For each pair B and N in the input, output A as defined above on a line by itself.

Example Input: Example Output:
4 3
5 3
27 3
750 5
1000 5
2000 5
3000 5
1000000 5
0 0
1
2
3
4
4
4
5
16

示例输入:

示例输出:

提示:

参考答案(内存最优[764]):

#include<stdio.h>
#include<math.h>
int main()
{
	int A,N;
	long B;
	int s;
	int i,m;
	double t;
	double m2,M;
	while(scanf("%d %d",&B,&N)!=EOF)
	{
		if(B==0&&N==0) break;
		else
		{
			if(N==1) A=B;
			else
			{
				t=sqrt(1.0*B);
				s=floor(t);
				for(i=1;i<=(s+1);i++)
				{

					M=pow(1.0*i,1.0*N);
					m=(int)M;
					if(B-m<0)
					{
						m2=pow(1.0*i-1,1.0*N);
						if(m-B>=B-(int)m2)
						{
							A=i-1;
							i=s+2;
						}
					}
					if(B-m==0)
					{
						A=i;
						i=s+2;
					}
				}
			}
			printf("%d\n",A);
			
		}
	}
	return 0;
}

参考答案(时间最优[0]):

#include<stdio.h>
#include<math.h>
int main()
{
	int A,N;
	long B;
	int s;
	int i,m;
	double t;
	double m2,M;
	while(scanf("%d %d",&B,&N)!=EOF)
	{
		if(B==0&&N==0) break;
		else
		{
			if(N==1) A=B;
			else
			{
				t=sqrt(1.0*B);
				s=floor(t);
				for(i=1;i<=(s+1);i++)
				{

					M=pow(1.0*i,1.0*N);
					m=(int)M;
					if(B-m<0)
					{
						m2=pow(1.0*i-1,1.0*N);
						if(m-B>=B-(int)m2)
						{
							A=i-1;
							i=s+2;
						}
					}
					if(B-m==0)
					{
						A=i;
						i=s+2;
					}
				}
			}
			printf("%d\n",A);
			
		}
	}
	return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注