数学建模社区-数学中国
标题:
POJ-1006问题
[打印本页]
作者:
maybe_madio
时间:
2010-10-26 23:30
标题:
POJ-1006问题
POJ-1006
& r+ G6 s& E. _" y/ E; {. H
5 }- K3 ~# Z; X+ E) J- Z9 h
在本地VC6.0下测试,得出正确结果, 为什么提交后总是Wrong Answer
) A" W, R7 C& v# \: a1 s( M$ e
' i/ R& b8 J1 G' [# ^8 B0 D# M" ^
现将代码贴出,请帮忙看看:
' G! f( o& X( e5 d( ?
#include <iostream>
5 Q1 v5 v2 @; L$ [; i% N7 c
using namespace std;
! R+ [ V6 K0 Z# c) m+ W- O
#define PH 0
5 d1 D& ?7 B8 c- ~
#define EM 1
2 T/ ]: C7 R- u. u$ M! z
#define IN 2
( @4 g2 W) Y s' A }3 G
int get_Top(int days, int kind);
8 N! f) F# _0 P$ F
int triple(int ptop, int etop, int itop, int cur);
, l$ d0 e2 y4 K+ p1 e% X
bool is_Integer(float n);
" A7 F4 S8 _# z6 c: H
int main()
: z L* P3 [# N0 x8 T
{
% z* s% y" k$ g$ C& e9 q, o
int ptop, etop, itop;
- r" c# X- ~& {* x" |7 o, y0 v
int pdays, edays, idays, curdays;
z7 d8 Z a3 r/ n
int count =0;
5 u1 ~4 l: w: R5 I4 H- Z/ ]
7 V+ \3 n7 ]7 q7 l% ?" |
while(cin >> pdays >> edays >> idays >> curdays)
1 y' v0 R4 o0 J8 {2 S$ D; v. D
{
' w: F* K) }# y6 _& f' E% W
if(pdays==edays&&pdays==idays&&pdays==curdays&&pdays==-1)
0 B Z1 { l( X: `
break;
' a" ^& C) ?/ r+ f
count++;
& |. K) { F0 a# a! x8 t0 q
ptop = get_Top(pdays,PH);
7 A, _0 L) Z) l+ f4 V! `$ `
etop = get_Top(edays,EM);
! Q+ o5 O$ p2 s* P" Q, y
itop = get_Top(idays,IN);
2 Y' u% p$ R. q: m
cout<<"Case "<<count<<": "<<"the next triple peak occurs in "<<triple(ptop, etop, itop, curdays)<<" days.";
' t% g/ K, u5 Y* a9 b
}
, u, l) }6 u4 t7 {" \/ }- B6 t! Y
$ g: g3 r" I3 y; h& ]6 {" W4 Y
return 0;
# P9 r/ W" ]# h% Z" P, f* t
}
+ F" i: l7 a( U/ z& b- Q% B* t) {4 A
int get_Top(int days, int kind)
: M' F# `8 ]- ~5 y% f
{
& ^! e/ M; l: k2 J; w
switch(kind)
& r: X" ^- x! B/ ^* D) T
{
* r) \+ b0 F8 W$ l o
case 0:
0 {2 ?& h1 [/ T4 W3 S
return days%23;
: P: n2 S0 y7 S% Z9 Y: d2 |+ s
case 1:
. `7 Q* |' l6 ?, S T
return days%28;
1 E X" s4 L3 H* O0 w* k
case 2:
% q& ?- ?; P. r& w4 w2 x' m
return days%33;
1 u- s1 k$ m9 n7 i) M6 @! ?
}
3 k7 p' S2 [$ O3 k% ~( [$ c ?
return 0;
" X) D3 M0 [$ t* ~
}
; R: \7 }- d5 G
& j3 G9 |& l) I& u0 m! g
int triple(int ptop, int etop, int itop, int cur)
/ O+ v1 W# Q- E" S# G0 G: o: i5 N2 |
{
) L6 l( Z7 r8 X: Y8 P! }8 z. g
float x, y, z;
5 p2 t( a. F" J5 `7 F. H( N
int m1 = etop-ptop-5,
8 {' ~5 o9 C- v) w
m2 = itop-etop-5;
& J4 n! s3 {. ?' ]9 X9 N- U9 G s
int temp = 0;
% z3 t. l6 ` b
for(z=2; (itop+(z-1)*33) <= 21252; z++)
; f5 x5 \$ w5 W+ Z* F' q
{
+ D4 Y/ G# a d! `/ R% g# @
temp = m2 + 33*z;
3 s! J( G- U* I" @. {; C
y = (float)temp/28;
1 \- u" F" G) @) Q* M
x = (float)(m1+temp)/23;
2 M& M& K3 ]* R2 g: Z
if(x>0 && y>0 && is_Integer(x) && is_Integer(y))
4 Q$ Y, ], v; C1 K; @* {
return itop + (z-1)*33 -cur;
6 K% w; w6 x+ F6 Q
}
$ M% f7 _6 u- l! Y* D% z
return 0;
% f5 E& Y X- W# l4 z( H
}
$ w2 I$ ?# `1 |# g. {
9 F; N+ L/ p U% F6 i$ v
bool is_Integer(float n)
$ R7 g; |/ \) q' s
{
' \8 N5 z5 m- w8 T, {
if( (int)n - n ==0)
, W0 J2 e, J# d/ [6 I% h* \* m* o/ y
return true;
: B* }# F8 L9 W" @9 W
else
$ l6 D: ]6 L1 K
return false;
6 u% q1 M; o. z D( w" y3 R, Q
}
! H Y. ~' J1 Z. X9 [0 M4 a
Z3 b& v2 n8 _: B% \. U
复制代码
3 Y; X! E- e. Y1 @( _$ S
作者:
ultra1989
时间:
2010-10-27 08:45
本帖最后由 ultra1989 于 2010-10-27 08:54 编辑
8 J9 K+ B" G3 c3 l7 m \& Q
9 f, k) A2 o9 n2 n0 {* \& L, q
用float可能会有精度问题用中国剩余定理求解
1 H8 x. m+ E. [ _6 O3 f
参考程序:
. a8 D) k6 k, C$ U
. S" L% j$ G7 \+ m
#include<stdio.h>
0 p2 d6 z- D; E m" w( S
int main(){
0 v2 O. p/ W* n( J5 @9 \/ i/ h. K
int a,b,c,m,n,i,d=1;
& `& v# @5 i7 l6 T0 V
while(scanf("%d%d%d%d",&a,&b,&c,&m)){
; ]8 l! M7 D$ x, D
! g3 p/ G' D* k/ d5 ]
if(a==-1&&b==-1&&c==-1&&m==-1) break;
1 b1 h# `$ ]) N7 Z
* I+ m, P1 Z( Z
n=0;
8 F- B3 i3 H: d! j# ?
+ s$ b: e/ N# b0 Y" J( x
i=(5544*a+14421*b+1288*c-m+21252)%21252;
. g7 h4 {9 O* E
( Z. j3 h5 s4 ^3 W& ?# i
if(!i)
+ e, M1 ?4 `8 J0 G( y, S' v- R3 W
2 K; o" w: _6 M! m% U! r2 k
i=21252;
, X) a) O* L0 u% P
& w' A) P/ F+ Z
printf("Case %d: the next triple peak occurs in %d days.\n",d++,i);
/ m: L9 o0 Z; ]$ b- W
# c* M6 g3 \7 r
}
/ o/ O- Y) S! O
0 G/ n& W& W0 ^4 j& b* \. e( {
return 0;
9 \: r$ N/ R6 U* P! u
}
! O$ }$ T3 i& B0 l
: T3 w! T) [7 g) x
作者:
qbist
时间:
2010-10-27 13:20
作者:
小草远在天涯
时间:
2010-10-27 17:27
好复杂啊,我是初级的。。。路过。。。
作者:
maybe_madio
时间:
2010-10-27 22:23
回复
ultra1989
的帖子
. H# b: p- a' n( _1 h/ r
6 a7 b& d3 C# L9 K1 J! _8 w6 k5 e
* x) T& D% M9 W L: j! v
确实这道题使用剩余定理解效率太高了! 哈哈! 学习了! 我还没有看过数论方面的书! 以后肯定要看看
: A/ }' f, x; C1 t
: r8 ]+ `. R& W# C n+ q
两个程序一对比,一下就体现出数学的强大力量!
0 `" P% g* a( b
作者:
39133120
时间:
2010-10-28 23:11
好复杂啊,得仔细
作者:
鸿光满面
时间:
2011-2-4 13:40
好复杂啊
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5