於是小 Y 到網上下載了一個溶液配置模擬器。溶液配置模擬器是這樣的程序:模擬器在電腦中構造一種虛擬溶液,然後你可以虛擬地向當前虛擬溶液中加入一定濃度一定質量的這種溶液,模擬器會快速地算出倒入後虛擬溶液的濃度和質量。當然,計算機最可愛的地方就是當你倒錯了可以撤銷。
模擬器的使用步驟是這樣的:
1. 為模擬器設置一個初始質量和濃度 V0 , C0% ( 0 ≤ C0≤100 )。
2. 進行一系列操作,模擬器支持兩種操作:
P(v,c) 操作:表示向當前的虛擬溶液中加入質量為 v 濃度為 c 的溶液;
Z 操作:撤銷上一步 P 操作。
但是,小 Y 不小心把模擬器弄丟了……,眼看考試迫在眉睫,小 Y 只能依靠你了。
輸入格式:
第一行,兩個整數 V0 , C0 。
第二行,一個整數 n ,表示操作數( n ≤ 10000 )。
接下來 n 行,每行一條操作,格式為:
P v c 或 Z 。
之間用一個空格隔開,當只剩初始溶液的時候,再撤銷就沒有用了。
任意時刻質量不會超過 2 31 -1 。
輸出格式:
輸入樣例:
100 100
2
P 100 0
Z
輸出樣例:
200 50.00000
100 100.00000
【分析】
純模擬。
【我的代碼】
C++语言: Codee#25684
01 #include <cstdio>
02 #include <cstdlib>
03 using namespace std;
04 const int MAXN=10002;
05 double V[MAXN],C[MAXN];
06 int Top=0;
07
08 void init()
09 {
10 double v,c;
11 scanf("%lf %lf\n",&v,&c);
12 Top++;
13 V[Top]=v;
14 C[Top]=c;
15 return;
16 }
17
18 void Dis()
19 {
20 if(Top==1)
21 {
22 printf("%.0lf %.5lf\n",V[1],C[1]);
23 return;
24 }
25 Top--;
26 printf("%.0lf %.5lf\n",V[Top],C[Top]);
27 return;
28 }
29
30 void Add(double v,double c)
31 {
32 Top++;
33 V[Top]=V[Top-1]+v;
34 C[Top]=(V[Top-1]*C[Top-1]+v*c)/V[Top];
35 printf("%.0lf %.5lf\n",V[Top],C[Top]);
36 return;
37 }
38
39 int main()
40 {
41 freopen("simulator.in","r",stdin);
42 freopen("simulator.out","w",stdout);
43 init();
44 int N;
45 scanf("%d\n",&N);
46 char ch;
47 double v,c;
48
49 for(int i=1;i<=N;i++)
50 {
51 scanf("%c",&ch);
52 while(ch==10 || ch==13)
53 scanf("%c",&ch);
54 if(ch=='Z')
55 {
56 Dis();
57 continue;
58 }
59 scanf("%lf %lf\n",&v,&c);
60 Add(v,c);
61 }
62 return 0;
63 }
02 #include <cstdlib>
03 using namespace std;
04 const int MAXN=10002;
05 double V[MAXN],C[MAXN];
06 int Top=0;
07
08 void init()
09 {
10 double v,c;
11 scanf("%lf %lf\n",&v,&c);
12 Top++;
13 V[Top]=v;
14 C[Top]=c;
15 return;
16 }
17
18 void Dis()
19 {
20 if(Top==1)
21 {
22 printf("%.0lf %.5lf\n",V[1],C[1]);
23 return;
24 }
25 Top--;
26 printf("%.0lf %.5lf\n",V[Top],C[Top]);
27 return;
28 }
29
30 void Add(double v,double c)
31 {
32 Top++;
33 V[Top]=V[Top-1]+v;
34 C[Top]=(V[Top-1]*C[Top-1]+v*c)/V[Top];
35 printf("%.0lf %.5lf\n",V[Top],C[Top]);
36 return;
37 }
38
39 int main()
40 {
41 freopen("simulator.in","r",stdin);
42 freopen("simulator.out","w",stdout);
43 init();
44 int N;
45 scanf("%d\n",&N);
46 char ch;
47 double v,c;
48
49 for(int i=1;i<=N;i++)
50 {
51 scanf("%c",&ch);
52 while(ch==10 || ch==13)
53 scanf("%c",&ch);
54 if(ch=='Z')
55 {
56 Dis();
57 continue;
58 }
59 scanf("%lf %lf\n",&v,&c);
60 Add(v,c);
61 }
62 return 0;
63 }
沒有留言:
張貼留言