数学建模社区-数学中国
标题:
POJ-1006问题
[打印本页]
作者:
maybe_madio
时间:
2010-10-26 23:30
标题:
POJ-1006问题
POJ-1006
5 g/ h0 B1 {, V6 `' z$ e8 I" |9 q
1 h, i$ P, l; _ G( B
在本地VC6.0下测试,得出正确结果, 为什么提交后总是Wrong Answer
0 x2 d2 q/ w5 ~% K" n& d
$ _( b1 G6 }- c7 q- _4 V8 [& ~" t
现将代码贴出,请帮忙看看:
% P% q b% p8 L# P1 h: ~' N
#include <iostream>
3 J7 Y8 Y+ \7 Y' C2 }- o
using namespace std;
2 A' E1 q! r" R* p; |3 a
#define PH 0
, ?! B7 X) H+ ?) K: s& T
#define EM 1
4 ], r( }0 I( k+ |% c6 m
#define IN 2
& G& Q8 [' a. D* `" O0 b @
int get_Top(int days, int kind);
3 t; v0 s+ u. \) c* T4 P4 D3 r; |
int triple(int ptop, int etop, int itop, int cur);
) H# d4 k% b7 `$ v! N$ \
bool is_Integer(float n);
3 h. l9 Z% j/ K% E
int main()
. Y% p7 n. Z8 M$ T" H( T. M7 a
{
+ k* t5 K/ A z
int ptop, etop, itop;
0 |8 Z' g2 |8 u! G5 M
int pdays, edays, idays, curdays;
C% T3 P- p( ^) ]& i4 {5 C
int count =0;
" P- o7 I4 L( j
) A+ w# Z4 o, U7 D7 x i4 i) o E2 ]$ m
while(cin >> pdays >> edays >> idays >> curdays)
! g. D3 [3 D8 h2 X/ A( I- }8 P
{
& r5 f8 K) T8 d% A' ^
if(pdays==edays&&pdays==idays&&pdays==curdays&&pdays==-1)
' F1 e% N) w* k# u% K
break;
1 ] c' n: l- E) n" r" k
count++;
4 F- w& K/ p1 D
ptop = get_Top(pdays,PH);
5 |, _! p8 N2 z9 v+ s
etop = get_Top(edays,EM);
" N5 w! }# B5 k# ]
itop = get_Top(idays,IN);
/ M* x' o. F: i+ l8 e b
cout<<"Case "<<count<<": "<<"the next triple peak occurs in "<<triple(ptop, etop, itop, curdays)<<" days.";
# q G; n V( P- B) L
}
; @) Z& |; z, K5 \1 V3 V6 B7 i3 z, {
' G6 o2 z0 q! u8 M: F) ~
return 0;
. A: _) N/ y4 t3 H2 \
}
, y9 m0 z: T$ H0 n* H/ E9 l
int get_Top(int days, int kind)
+ r x- |2 R0 |" V9 x
{
# Q$ p! F; m% Z ^2 f: I
switch(kind)
8 R) _0 k9 n e8 \- n' C C4 `
{
" `+ S+ S. } J1 J6 ?' q
case 0:
0 |+ B# ^0 k4 A& f- R0 D
return days%23;
6 o2 z/ W) ^) A
case 1:
! S3 @6 r2 Y$ h6 M
return days%28;
+ Z9 C$ R# {. a( r! T/ O
case 2:
9 K8 P& G9 \* b; j4 C
return days%33;
% v. v" M5 Z# ^4 N
}
% ?5 |" n+ C( q4 k3 u# F" ]% T Z
return 0;
7 T# m9 ~% I. s
}
# S" t; X6 y8 ?) y1 o( _; C
1 x9 o4 z4 |! y1 u
int triple(int ptop, int etop, int itop, int cur)
+ R% ~; s+ |& P/ {( b
{
0 }; C; ?8 U& p) o
float x, y, z;
' s& {/ h) y2 ^8 e/ Z) t2 _
int m1 = etop-ptop-5,
6 L( E7 x& g" S+ _! u
m2 = itop-etop-5;
2 G' i' l8 E$ n# D2 z4 r2 C V
int temp = 0;
1 c- @, V t+ R! Q: e5 e$ R E
for(z=2; (itop+(z-1)*33) <= 21252; z++)
$ F. \9 ?, U/ C! c
{
9 t! e2 E ^5 V/ A) u
temp = m2 + 33*z;
3 j. k8 @! m W' a7 X6 N6 F9 S1 S' ~
y = (float)temp/28;
( _! l4 Z' } U+ y6 N+ j: ?
x = (float)(m1+temp)/23;
% q$ M% G# @0 e
if(x>0 && y>0 && is_Integer(x) && is_Integer(y))
( T( s% f# U' B
return itop + (z-1)*33 -cur;
, ]. z: V! n: O+ w1 Y6 I5 u7 m
}
8 k/ L+ B5 A3 Q6 i0 Y8 k: b
return 0;
7 z) k1 v' [( u* ? Z5 ^5 w
}
2 K$ p g5 v/ d/ n# y( e% ?
( \; h. Z0 Y1 z( G: a4 y
bool is_Integer(float n)
[( c4 ?% ~) l
{
% `3 o7 `8 `5 U/ q {8 T
if( (int)n - n ==0)
4 R, U3 r8 @9 v9 w! @
return true;
2 L1 a" `9 H! p5 s; _
else
6 z! M; C# j+ }# I5 ^# \5 @
return false;
" ?) X5 B: k; }
}
, x+ u G3 w+ t3 u H7 x
$ E ]. ~& P1 P/ g0 ~" d
复制代码
: m8 U% A( d; L% j2 y
作者:
ultra1989
时间:
2010-10-27 08:45
本帖最后由 ultra1989 于 2010-10-27 08:54 编辑
# n7 j3 S7 C' v, ~5 i5 f1 k( |
% H& F# r, Q0 [& w m, u) I
用float可能会有精度问题用中国剩余定理求解
, e& w+ a+ ^# G# `, a
参考程序:
5 y8 O$ n4 R$ E5 n+ d/ i
1 f- C: T% @5 |% t) e
#include<stdio.h>
/ e9 w/ u! f% t& f- B0 U& p
int main(){
; d E) ^# M8 b7 C7 R
int a,b,c,m,n,i,d=1;
8 R9 T" I" w; P
while(scanf("%d%d%d%d",&a,&b,&c,&m)){
+ I- s. q6 |1 g( ^1 O9 j1 \7 h
4 r- J- d0 |" H- M: H
if(a==-1&&b==-1&&c==-1&&m==-1) break;
; `% c' i6 U9 u6 D/ Z
" i0 w3 {7 o% s8 r
n=0;
+ ~5 W% q' ]6 q& @
( N4 p0 v( B; j# V2 \! }+ K8 P7 i) d3 `
i=(5544*a+14421*b+1288*c-m+21252)%21252;
7 I& ~3 @, P( Z& p, d
$ L) q+ a/ M/ y" c! a
if(!i)
+ V8 S( K! |( Z* i
7 w. O o1 i1 ?1 Y
i=21252;
8 j2 h' b v# O) w; G4 Q
/ j" j0 a' s' h# G
printf("Case %d: the next triple peak occurs in %d days.\n",d++,i);
, |, _! J2 J. G/ u$ \
2 i8 b* k$ t6 f
}
2 X7 u9 I: I0 @+ o0 @( E
9 g+ q; C4 f% x3 V; I4 e# Y6 l8 L' b! J
return 0;
4 Q `' k9 A Q6 _& E& c& i
}
5 |3 }; }( g" ]- g6 Q
/ h3 w( A, P _8 d7 h0 p- b4 I: s
作者:
qbist
时间:
2010-10-27 13:20
作者:
小草远在天涯
时间:
2010-10-27 17:27
好复杂啊,我是初级的。。。路过。。。
作者:
maybe_madio
时间:
2010-10-27 22:23
回复
ultra1989
的帖子
9 N6 ~; e, w! ^' `
* O8 h" f+ L) ?' C( c2 q2 K
X o! d( O; s
确实这道题使用剩余定理解效率太高了! 哈哈! 学习了! 我还没有看过数论方面的书! 以后肯定要看看
8 R- ?- j$ w; L# f/ }
+ _1 Y, j/ H) L9 u6 k6 Q
两个程序一对比,一下就体现出数学的强大力量!
, y) w: ~5 V, b) m/ y; i( \# J
作者:
39133120
时间:
2010-10-28 23:11
好复杂啊,得仔细
作者:
鸿光满面
时间:
2011-2-4 13:40
好复杂啊
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5