首页 > ACM题库 > HDU-杭电 > hdu 2179 pi[解题报告]C++
2013
12-30

hdu 2179 pi[解题报告]C++

pi

问题描述 :

计算圆周率到小数点后5n 位。(本题不可打表)

输入:

正整数n<300. n=0结束.

输出:

正整数n<300. n=0结束.

样例输入:

20
15
0

样例输出:

3.
 14159 26535 89793 23846 26433 83279 50288 41971 69399 37510
 58209 74944 59230 78164 06286 20899 86280 34825 34211 70679
3.
 14159 26535 89793 23846 26433 83279 50288 41971 69399 37510
 58209 74944 59230 78164 06286

PI设置为3.1415927 WA了一次!

#include <iostream>
#include <cmath>
using namespace std;
const double PI = 3.1415926;

int main()
{
	int t;
	cin >> t;
	for(int i = 1; i <= t; i++)
	{
		double x, y;
		cin >> x >> y;
		double d = x * x + y * y ;
		double s = 0.5 * PI * d;
		int year = ceil(s / 50.0);
		printf("Property %d: This property will begin eroding in year %d.\n", i, year);
		if(i == t)
			printf("END OF OUTPUT.\n");
	}
	return 0;
}

解题转自:http://blog.csdn.net/vsooda/article/details/8008053


  1. #!/usr/bin/env python
    def cou(n):
    arr =
    i = 1
    while(i<n):
    arr.append(arr[i-1]+selfcount(i))
    i+=1
    return arr[n-1]

    def selfcount(n):
    count = 0
    while(n):
    if n%10 == 1:
    count += 1
    n /= 10
    return count

  2. 可以参考算法导论中的时间戳。就是结束访问时间,最后结束的顶点肯定是入度为0的顶点,因为DFS要回溯

  3. 代码是给出了,但是解析的也太不清晰了吧!如 13 abejkcfghid jkebfghicda
    第一步拆分为 三部分 (bejk, cfghi, d) * C(13,3),为什么要这样拆分,原则是什么?

  4. 在方法1里面:

    //遍历所有的边,计算入度
    for(int i=0; i<V; i++)
    {
    degree = 0;
    for (j = adj .begin(); j != adj .end(); ++j)
    {
    degree[*j]++;
    }
    }

    为什么每遍历一条链表,要首先将每个链表头的顶点的入度置为0呢?
    比如顶点5,若在顶点1、2、3、4的链表中出现过顶点5,那么要增加顶点5的入度,但是在遍历顶点5的链表时,又将顶点5的入度置为0了,那之前的从顶点1234到顶点5的边不是都没了吗?

  5. #include <stdio.h>
    int main(void)
    {
    int arr[] = {10,20,30,40,50,60};
    int *p=arr;
    printf("%d,%d,",*p++,*++p);
    printf("%d,%d,%d",*p,*p++,*++p);
    return 0;
    }

    为什么是 20,20,50,40,50. 我觉得的应该是 20,20,40,40,50 . 谁能解释下?