《ACM程序设计》书中题目 T

来源:互联网 发布:苹果6s只能用2g网络 编辑:程序博客网 时间:2024/05/22 17:04
题目简要:
给定正整数B和N,找到一个整数A,使得AN尽可能接近B.(结果A是B的第N个根的近似值)。注意,AN可以小于,等于或大于比B.

输入:输入由B和N的一对或多对值组成。每对出现在单个行上,由单个空格分隔。 指定B和N的值零的线标记输入的结束。B的值在1至1,000,000(包括)的范围内,N的值在1至9(包括1和9)的范围内。

输出:对于输入中的每对B和N,如上定义的输出A本身在一行上。

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



解题思路:

  这道题其实只需要解决开根号的问题就好了,将b开n次根,取到double型的a,然后在判断,哪一个是更接近的整数。
基本思路还是比较容易的,只是在一开始开根号是不知如何是好。不过后来发现其实开n次根,其实就是1/n次方,所以用pow直接就可解决。

附代码:

#include<bits/stdc++.h>      
using namespace std;
int main()
{
vector<int>s;
int A1,A2,b,n,i;
double a;
while(cin>>b>>n&&b!=0&&n!=0)
{
a=pow(b,1.0/n);
A1=a;
A2=a+1;
if(fabs(b-(pow(A1,n)))>fabs(b-(pow(A2,n))))
    s.push_back(A2);
else
s.push_back(A1);
}
for(i=0;i<s.size();i++)
{
cout<<s[i]<<endl;
}
return 0;
}

解题感受:

  这是我第一次一次提交就A,感觉很兴奋,收获就是需要拓展思维,不能拘泥。要习惯从多个角度看问题。这是3月10号的第一道题,其实已经晚上11点了·····由于白天满课实在没有时间,只好晚上打了···
1 0
原创粉丝点击