PKU 2124 The Balance 題解
這個(gè)題目第一眼看上去準(zhǔn)備用數(shù)學(xué)方法解決后來看上去數(shù)據(jù)范圍比較小感覺直接枚舉就可以了
然后寫了個(gè)枚舉的程序
ax+by=c
然后枚舉a動(dòng)態(tài)的保存min=a+b的最小值
當(dāng)枚舉的a>min的時(shí)候就停止就可以了
1
#include<stdio.h>
2
int main()
3

{
4
int a,b,c,la,lb,x,y,ansx,ansy,l,min1,min2;
5
while(scanf("%d%d%d",&a,&b,&c),a+b+c)
6
{
7
la=0;
8
min1=1000000000;
9
min2=1000000000;
10
while(1)
11
{
12
if(la>min1 ||la*a>min2)break;
13
l=a*la-c;
14
if(l>=0 && l%b==0)
15
{
16
lb=l/b;
17
x=la;y=lb;
18
if(lb<0)lb=-lb;
19
if(la+lb<min1 ||(la+lb==min1 && la*a+lb*b<min2))
{
20
min1=la+lb;
21
min2=la*a+lb*b;
22
ansx=x;ansy=y;
23
}
24
}
25
26
l=c-a*la;
27
if(l>=0 && l%b==0)
28
{
29
lb=l/b;
30
x=la;y=lb;
31
if(lb<0)lb=-lb;
32
if(la+lb<min1 ||(la+lb==min1 && la*a+lb*b<min2))
{
33
min1=la+lb;
34
min2=la*a+lb*b;
35
ansx=x;ansy=y;
36
}
37
}
38
39
l=c+a*la;
40
if(l>=0 && l%b==0)
41
{
42
lb=l/b;
43
x=la;y=lb;
44
if(lb<0)lb=-lb;
45
if(la+lb<min1 ||(la+lb==min1 && la*a+lb*b<min2))
{
46
min1=la+lb;
47
min2=la*a+lb*b;
48
ansx=x;ansy=y;
49
}
50
}
51
la++;
52
}
53
printf("%d %d\n",ansx,ansy);
54
}
55
return 0;
56
}
57

2

3



4

5

6



7

8

9

10

11



12

13

14

15



16

17

18

19



20

21

22

23

24

25

26

27

28



29

30

31

32



33

34

35

36

37

38

39

40

41



42

43

44

45



46

47

48

49

50

51

52

53

54

55

56

57

posted on 2008-07-19 19:23 gong 閱讀(156) 評(píng)論(0) 編輯 收藏 引用