→ kakashiliu:你的Pi....... 61.58.184.76 08/30
> -------------------------------------------------------------------------- <
作者: kakashiliu (kakashi) 看板: C_and_CPP
標題: Re: [問題] ACM 10573
時間: Tue Aug 30 21:51:11 2005
※ 引述《flashliqu (你幹麻不說中文)》之銘言:
: 這是小弟的中文題目
: http://www2.dmhs.kh.edu.tw/homework/q10573.htm
: 小弟寫的程式上傳收到Wrong Answer的錯誤
: 但是跑了幾個隨機數字都正確,希望各位大大能指出錯誤的地方 <(__)>
: 附上小弟的Code:
: #include <iostream>
: #include <string>
: #include <stdlib.h>
: #include <stdio.h>
#include <cmath>
: using namespace std;
: #define pi 3.1415926535897
double pi= 2*cos-1(0)
: int main()
: {
: int n,num[5];
: char var[10];
: double output;
: cin>>n;
: string input;
: string separators = " ";
: for(int i=0;i<=n;i++)
: {
: int j=0;
: memset(var,'\0',10);
: getline(cin,input,'\n');
: int start = input.find_first_not_of(separators);
: int end = 0;
: int word_count = 0;
: while(start != string::npos)
: {
: end = input.find_first_of(separators,start+1);
: if(end == string::npos)
: end = input.length();
: word_count++;
: (input.substr(start,end-start)).copy(var,end-start);
: num[j] = atoi(var);
: j++;
: start = input.find_first_not_of(separators,end+1);
: //cout<<num[j]<<endl;
: }
: cout.setf(ios::fixed , ios::floatfield );
: cout.precision(4) ;
: if(word_count==2)
: {
: output = 2 * num[0] * num[1] * pi;
: cout<<output<<endl;
: }
: else if(word_count==1)
: {
: output = num[0] * num[0] * pi /8;
: cout<<output<<endl;
: }
: }
: }
抱歉我說要寫...結果一直在摸...XD
你先試試看...orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.58.184.76
推 flashliqu:感恩 Orz 但是我還是被WA了 >< 220.135.118.36 08/30
推 RmX:你的Impossible部份好像沒寫到耶... 220.138.191.88 08/30
推 kakashiliu:那個case不用討論...... 61.58.184.76 08/30
推 jeunder:3.1415926535897932384626433832795028841971693 61.64.150.151 08/31
推 freelancer:這麼準也沒用,math.h 有現成的 M_PI 可以用 140.113.27.50 08/31
推 ix:3.14159265358979323846 << M_PI218.167.187.151 08/31
> -------------------------------------------------------------------------- <
作者: jeunder (omega~ oh my god) 看板: C_and_CPP
標題: Re: [問題] ACM 10573
時間: Wed Aug 31 02:24:11 2005
: 推 jeunder:3.1415926535897932384626433832795028841971693 61.64.150.151 08/31
: 推 freelancer:這麼準也沒用,math.h 有現成的 M_PI 可以用 140.113.27.50 08/31
acm 的 gcc 的 library 版本太舊了, 所以沒有 M_PI 的定義.
不知道它的 pi 常數定義成什麼?
不過你說的對, 其實不用那麼高的精準度,
所以我引用原po的 pi 的定義也被 accepted 了.
http://acm.uva.es/cgi-bin/OnlineJudge?ProblemStat:10573:25:150:1.00
CPU Time Memory Author Source Date (UTC) ID (host)
156 0:00.000 64 jeunder yu C++ 2005/08/30-17:25:11.486 3884238 (H0)
/////////////////////////////////////////////////////////////////////
#include <cmath>
#include <cstdio>
using namespace std;
#define M_PI 3.1415926535897
int main()
{
int n;
scanf("%d\n", &n);
while(n--) {
char line[8];
gets(line);
if(line[1] == 0 || line[2] == 0) {
int t;
sscanf(line, "%d", &t);
printf("%.4f\n", t * t * (M_PI / 8.0));
}
else {
int r1, r2;
sscanf(line, "%d %d", &r1, &r2);
printf("%.4f\n", r1 * r2 * (2.0 * M_PI));
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.64.150.151
推 flashliqu:看您解題真的是一種享受 220.135.118.36 08/31
推 UNARYvvv:哇 .. 0:00.000 61.70.137.117 08/31
推 flashliqu:感謝大家的協助 <(__)> 這地方好溫馨 220.135.118.36 08/31
推 intotherain:厲害!! 59.113.182.170 08/31
> -------------------------------------------------------------------------- <
作者: latinboy (暱稱) 看板: C_and_CPP
標題: Re: [問題] ACM 10573
時間: Wed Aug 31 02:10:16 2005
※ 引述《kakashiliu (kakashi)》之銘言:
: ※ 引述《flashliqu (你幹麻不說中文)》之銘言:
: : 這是小弟的中文題目
: : http://www2.dmhs.kh.edu.tw/homework/q10573.htm
: : 小弟寫的程式上傳收到Wrong Answer的錯誤
: : 但是跑了幾個隨機數字都正確,希望各位大大能指出錯誤的地方 <(__)>
: : 附上小弟的Code:
: : double output;
: : cin>>n;
: : string input;
: : string separators = " ";
: : for(int i=0;i<=n;i++)
^ 應該是1
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.165.8
推 ix:他把cin>>n也跑了一次 所以等於零是對的||218.167.187.151 08/31
→ ix:在cin>>n; 下加一行cin.ignore();218.167.187.151 08/31
→ ix:for可以改成for(int i=0;i<n;i++)218.167.187.151 08/31
→ ix:應該說是多抓了一個\n218.167.187.151 08/31
> -------------------------------------------------------------------------- <
作者: ix (ix) 看板: C_and_CPP
標題: Re: [問題] ACM 10573
時間: Wed Aug 31 22:41:05 2005
哈囉大家 我把J大的程式改成C++的寫法 吃了WA
我用程式跑出10010種測資 然後diff兩個程式的跑出來結果
結果一樣阿@@ 可以請版眾解惑一下 到底哪裡出了問題~"~
(._.?)
#include<iostream>
#include<sstream>
#include<string>
using namespace std;
const double M_PI=3.14159265358979323846;
int main() {
int n,r1,r2,t;
string input;
cin >> n; cin.ignore();
cout.setf(ios::fixed);
cout.precision(4);
while(n--) {
getline(cin,input);
if(input[1]==0 || input[2]==0) {
istringstream(input) >> t;
cout << t*t*(M_PI/8.0) << endl;
}
else {
istringstream(input) >> r1 >> r2;
cout << r1*r2*(2.0*M_PI) << endl;
}
}
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.136.127.56
推 kakashiliu:原來C++是用istringstream..這倒是幫我解惑了 61.58.184.76 08/31
> -------------------------------------------------------------------------- <
作者: khoguan (Khoguan Phuann) 看板: C_and_CPP
標題: Re: [問題] ACM 10573
時間: Thu Sep 1 01:03:41 2005
※ 引述《ix (ix)》之銘言:
: 哈囉大家 我把J大的程式改成C++的寫法 吃了WA
: 我用程式跑出10010種測資 然後diff兩個程式的跑出來結果
: 結果一樣阿@@ 可以請版眾解惑一下 到底哪裡出了問題~"~
: #include<iostream>
: #include<sstream>
: #include<string>
: using namespace std;
: const double M_PI=3.14159265358979323846;
: int main() {
: int n,r1,r2,t;
: string input;
: cin >> n; cin.ignore();
: cout.setf(ios::fixed);
cout.setf(ios::fixed, ios::floatfield); // 但不是重點
: cout.precision(4);
: while(n--) {
: getline(cin,input);
: if(input[1]==0 || input[2]==0) {
^^^^^^^^^^^^^^^^^^^^^^^^^^
這個條件是重點,如果用 g++ 3.x 沒問題,可能就是 ACM 用的 g++ 2.95
的 libstdc++ 在這部份對標準的支援又不夠了。請改用測試長度的方式
就會過了。要不,就將 input 宣告為 char [N] 然後 getline 那邊改一下
也行。
: istringstream(input) >> t;
: cout << t*t*(M_PI/8.0) << endl;
: }
: else {
: istringstream(input) >> r1 >> r2;
: cout << r1*r2*(2.0*M_PI) << endl;
: }
: }
: return 0;
: }
唉,我連上面那兩個算面積的公式也不懂。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.208.168
推 ix:喔原來是這樣 orz 220.136.127.56 09/01
→ ix:看來以後要用舊版GCC編過= = 220.136.127.56 09/01