1. 程式人生 > >HNUSTOJ-1639 分糖果(幾何)

HNUSTOJ-1639 分糖果(幾何)

內存 clas amp 包含 spa 的人 精度 1.0 mat

1639: 分糖果

時間限制: 1 Sec 內存限制: 128 MB
提交: 261 解決: 118
[提交][狀態][討論版]

題目描述

為了實驗室的發展,吳大大采購了一箱零食O(∩_∩)O~~

在吳大大取快遞的時候,實驗室已經已經默默地聚集了一堆吃貨,準備搶劫他,為了避免發生由一袋零食引發的血案,同時也是為了體現我們實驗室的和諧,在實驗室的N個人達成了一個協議:等吳大大一回來,大家就包圍他!但是每個人必須保證距離吳大大1m,並且相鄰兩人間的距離相等。

但是實驗室的N個人都不知道怎麽站更加合適,於是我們就打算寫一個程序確定一下大家的位置。我們規定以吳大大為坐標原點,N個人中的一個人首先占據(0,1)的位置,其余的人按照逆時針方向依次站立。

輸入

多組數據。

每組數據一行,包含一個整數N,N∈[3,15]。

輸出

每組數據的第一行先輸出一個”Case #:”,#代表第幾組數據。

接下來N行逆時針輸出N個人的坐標。

坐標保留小數點後三位。

樣例輸入

3
4

樣例輸出

Case 1:
0.000 1.000
-0.866 -0.500
0.866 -0.500
Case 2:
0.000 1.000
-1.000 0.000
0.000 -1.000
1.000 0.000

提示

註意浮點數的精度問題,註意不要輸出-0.000


可用if(x < 0 && x>-0.000001) x = 0;來判斷

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
 
using namespace std;
const double pi = acos(-1);
char ch[105];
int main(){
    int n,Case = 0;
    while(scanf("%d", &n) == 1){
        double unit = (2.0*pi)/n, sum = pi/2;
        printf(
"Case %d:\n", ++Case); printf("%.3f %.3f\n", cos(pi/2), sin(pi/2)); for(int i = 2; i <= n; i++){ sum += unit; double x = cos(sum), y = sin(sum); if(x < 0 && x > -0.000001) x = 0; if(y < 0 && y > -0.000001) y = 0; printf("%.3f %.3f\n", x, y); } } }

HNUSTOJ-1639 分糖果(幾何)