[TIOJ] 1005. 圓周率問題

題目連結:http://tioj.infor.org/problems/1005
就按照題目做,直接$O(n^2)$把所有組合跑過一遍做gcd,然後算就好,但要記得處理一下浮點數誤差
#include <stdio.h>
#include <math.h>
int gcd(int a, int b){
        int t;
        if(b>a){
                t = b;
                b = a;
                a = t;
        }
        int last;
        do{
                a %= b;
                last = a;
                t = b;
                b = a;
                a = t;
        }while(last!=0);
        return a;
}

void read(int sum){
        if(sum!=0){
                int a = 0, count = 0, all = 0;
                int temp[50];
                for(int i = 0;i<sum;i++){
                        scanf("%d",&a);
                        temp[i] = a;
                }
                for(int i = 0;i<sum;i++){
                        for(int j = i+1;j<sum;j++){
                                all++;
                                if(gcd(temp[i], temp[j])==1){
                                        count++;
                                }
                        }
                }
                if(count!=0)
                        printf("%.6f\n", (float)sqrt((all * 6.0 / count)));
                else
                        printf("No estimate for this data set.\n");
        }
}
int main(){
        int s;
        do{
                scanf("%d",&s);
                read(s);
        }while(s!=0);
        return 0;
}

留言

這個網誌中的熱門文章

[NPSC] 2009初賽 E. 檸檬汽水傳說

[TIOJ] 1902. 「殿仁.王,不認識,誰啊?」,然後他就死了……

[AtCoder] [經典競程 90 題] 024 - Select +/- One(★2)