数学建模社区-数学中国
标题:
POJ-1006问题
[打印本页]
作者:
maybe_madio
时间:
2010-10-26 23:30
标题:
POJ-1006问题
POJ-1006
2 I9 o( u0 K" m8 M9 ?" S: \& _
4 T& G- {2 m& [) C# t+ [
在本地VC6.0下测试,得出正确结果, 为什么提交后总是Wrong Answer
/ H" p s$ }7 D
5 y4 j2 G1 p# U' u# _* ]( Z
现将代码贴出,请帮忙看看:
! L$ Y" K& m P- Z1 H' i/ A
#include <iostream>
' l+ S2 A% T( u8 i3 o
using namespace std;
4 _7 s! w4 k6 E; R3 N# i( ]6 x
#define PH 0
" T$ o" A) h; G9 x. Y9 D
#define EM 1
' X8 e! u2 p$ p
#define IN 2
! g( X* o/ t% y5 c" ^- O
int get_Top(int days, int kind);
?1 K* k E* p# ~
int triple(int ptop, int etop, int itop, int cur);
- X; I) t R8 K$ a/ O
bool is_Integer(float n);
5 V7 J* W" m: c7 N+ M8 H
int main()
6 F3 ~6 f. z% q* _ y2 v
{
) h* K, N( T% _/ W# ~1 L9 E& b
int ptop, etop, itop;
# r' N) l' k! ~& C4 [5 m" p
int pdays, edays, idays, curdays;
4 \9 ~/ N$ Z% ?
int count =0;
8 ?% C3 z; B7 h" k. Q
7 u: J/ y4 N. J/ q. d
while(cin >> pdays >> edays >> idays >> curdays)
+ O# |* P3 Q) b. U* |* b6 d& Q
{
# X5 L3 C0 `/ D/ ^ V
if(pdays==edays&&pdays==idays&&pdays==curdays&&pdays==-1)
( d1 @4 o9 x) o \ [5 N
break;
" `4 _6 v4 E/ d
count++;
) k W3 `( f, b; d3 W
ptop = get_Top(pdays,PH);
. z) y& S$ ^$ A# @) a- S* v
etop = get_Top(edays,EM);
$ u N8 q* ^6 e9 }
itop = get_Top(idays,IN);
. o" ~3 J! Z. G7 i4 z" |8 n0 B& ]+ A
cout<<"Case "<<count<<": "<<"the next triple peak occurs in "<<triple(ptop, etop, itop, curdays)<<" days.";
9 }1 |- B" b: \ a; _ ?: K
}
. p7 S$ j: I9 @# E, A0 ?
. c4 `) t/ M9 r( }8 N; w6 _2 b# Y& R- {
return 0;
" O5 l& M- p' K9 ^5 Y9 \
}
2 f+ Y0 f: Z2 a; G& k" g
int get_Top(int days, int kind)
% q N& t4 G) f
{
$ R! b0 [4 G1 e& M" \
switch(kind)
: ], t: k- X$ m+ Y. l8 {
{
; \( p6 y6 ^3 u' R
case 0:
W! |! d- C2 u
return days%23;
# R2 ^: D5 g1 C- c* p
case 1:
3 S/ c A: x4 R/ W3 Z+ k- s
return days%28;
! }4 {% {; p# y5 L0 m0 s
case 2:
* R4 Q. n7 B4 Y- w3 Y
return days%33;
0 i: B" P; W8 n& ?( _
}
1 t3 i# r: c. l7 ?
return 0;
8 F% f3 J$ v+ ?( r: m; m! u
}
1 x" W Z7 T, Y N- H1 J
; P7 @+ n0 ~" v* ?6 s
int triple(int ptop, int etop, int itop, int cur)
8 j# v* [; X. Z0 l1 Z0 [
{
! Y% {; ?3 }) C- `
float x, y, z;
/ W% C- y7 q" i+ e, I
int m1 = etop-ptop-5,
1 v& K% d; l) Q( i
m2 = itop-etop-5;
; u2 V- Q# v# M1 ^4 i8 G
int temp = 0;
/ b. I6 E1 a5 F' A" j
for(z=2; (itop+(z-1)*33) <= 21252; z++)
* u( D1 Y; H5 p2 B$ @
{
+ r4 j, `1 S, [+ ^
temp = m2 + 33*z;
6 M: ^! C' o7 |: a. L
y = (float)temp/28;
7 j) _1 T% u3 I( C. X: T8 D
x = (float)(m1+temp)/23;
) V& }, J1 Z6 m
if(x>0 && y>0 && is_Integer(x) && is_Integer(y))
1 L0 U. m4 H& C% }/ N) i4 H, l+ U3 }
return itop + (z-1)*33 -cur;
" v1 e8 |7 ~! G7 U5 h/ H
}
! a3 _( u# p$ C/ W# H
return 0;
3 b! N" o$ J5 M. \8 P
}
2 O2 T9 m- T/ \4 I6 T
$ K' E3 e) _, F; S: i
bool is_Integer(float n)
& `7 h! `. R3 w. M" |
{
4 i2 A+ [+ u3 o
if( (int)n - n ==0)
! {3 Z8 {# ~0 L7 y* c6 U+ P% c
return true;
5 e% E, y5 Y% C8 c) d+ B4 w# f* Z
else
9 c) D4 Y7 U; Z8 E
return false;
m. Z9 C0 U3 S( F
}
' ?3 a! Q+ F3 z8 x: p( x
B7 h- P/ h. I3 s n8 o
复制代码
% D# t/ N% Y$ s$ Y
作者:
ultra1989
时间:
2010-10-27 08:45
本帖最后由 ultra1989 于 2010-10-27 08:54 编辑
, j# X0 Z7 R2 `; I+ }8 K
0 v, w4 K' `. S$ O
用float可能会有精度问题用中国剩余定理求解
& `1 G# V, H! T: e
参考程序:
0 \/ r$ {# `: j. i+ B
4 A3 w+ Z j% v% A
#include<stdio.h>
0 m# z; m9 d8 J" b) _
int main(){
4 d, n6 ^2 V/ P1 a
int a,b,c,m,n,i,d=1;
3 ?5 _% j9 f4 R8 }; ^' \; s
while(scanf("%d%d%d%d",&a,&b,&c,&m)){
L% J$ m4 a7 l
# Z+ A3 {5 d7 m# J
if(a==-1&&b==-1&&c==-1&&m==-1) break;
d9 n& A/ M& x3 _) J
# ]& X+ U5 z- C+ U) @! U; g$ Q6 r7 C
n=0;
8 @: E* _) G0 \! Y! v/ J: _% x5 c
5 X$ l2 r5 j! U& v- G0 o8 g
i=(5544*a+14421*b+1288*c-m+21252)%21252;
, t" j* Z, R% E% n0 L
# E( u! Y! A6 e$ K* F' o
if(!i)
: h& x9 j( q( A; F. L. e) c
7 ^! ?1 G$ W/ X+ t" v
i=21252;
5 [+ u2 J6 A0 u- u
3 o: _0 l: z. t. J
printf("Case %d: the next triple peak occurs in %d days.\n",d++,i);
6 ^' A9 `+ B* c- |' E
) h3 s G+ W9 g, S
}
( O" ~( o5 u+ D) s) E: P1 D
% h6 O5 |+ J M: j3 Y
return 0;
( |, L7 f; r' W- `# k4 A
}
9 \$ q3 I5 i) s
6 s: B$ y5 u) ~% {4 ~
作者:
qbist
时间:
2010-10-27 13:20
作者:
小草远在天涯
时间:
2010-10-27 17:27
好复杂啊,我是初级的。。。路过。。。
作者:
maybe_madio
时间:
2010-10-27 22:23
回复
ultra1989
的帖子
e8 r# g% c; k c6 u6 m; w
5 a0 W F# C9 }) U) y8 ^
; J8 d5 g8 a4 p! s
确实这道题使用剩余定理解效率太高了! 哈哈! 学习了! 我还没有看过数论方面的书! 以后肯定要看看
( w8 o3 L$ v4 q6 X, f4 L) i
c4 h) z# N% D4 G5 H* |- t
两个程序一对比,一下就体现出数学的强大力量!
' V* p$ v, u6 D+ y* y
作者:
39133120
时间:
2010-10-28 23:11
好复杂啊,得仔细
作者:
鸿光满面
时间:
2011-2-4 13:40
好复杂啊
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5