精華區beta C_and_CPP 關於我們 聯絡資訊
這是小弟的中文題目 http://www2.dmhs.kh.edu.tw/homework/q10573.htm 小弟寫的程式上傳收到Wrong Answer的錯誤 但是跑了幾個隨機數字都正確,希望各位大大能指出錯誤的地方 <(__)> 附上小弟的Code: #include <iostream> #include <string> #include <stdlib.h> #include <stdio.h> using namespace std; #define pi 3.1415926535897 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; } } } -- 排版若不精美請各位見諒 在下實在沒有藝術天份 <(_)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.118.36
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