考研上机水题整理——浙大2006

题目1019:简单计算器

栈的比较经典的运用,记得用栈,队列和容器的时候,要清空,其次就是用栈的基本套路,取值,弹出,推入,输出

 1 #include<stdio.h>
 2 #include<stack>
 3 using namespace std;
 4  
 5 int main()
 6 {
 7     int a,b;
 8     char c,d;
 9     stack <double> s;
10     while(~scanf("%d ",&a)&&a)
11     {
12         while(!s.empty())
13             s.pop();
14         s.push(a);
15         while(~scanf("%c %d%c",&c,&b,&d))
16         {
17             if(c=='+')
18                 s.push(b);
19             else if(c=='-')
20                 s.push(-b*1.0);
21             else if(c=='*')
22             {
23                 double tmp=s.top();
24                 //printf("%lf\n",tmp);
25                 s.pop();
26                 s.push(tmp*b);
27             }
28             else if(c=='/')
29             {
30                 double tmp=s.top();
31                 //printf("%lf\n",tmp);
32                 s.pop();
33                 s.push(tmp/b);
34             }
35             if(d!=' ')
36                 break;
37         }
38        // double ans=0;
39         while(!s.empty())
40         {
41             if(s.size()==1)
42             {
43                 printf("%.2lf\n",s.top());
44                 break;
45             }
46             double tmp1=s.top();
47             //printf("%lf\n",tmp1);
48             s.pop();
49             double tmp2=s.top();
50             s.pop();
51             s.push(tmp1+tmp2);
52         }
53         //printf("%.2lf\n",ans);
54  
55  
56     }
57     return 0;
58 }
59  

题目1018:统计同成绩学生人数

哈希数组的应用

题目1017:还是通畅工程

最小生成树不过比并查集多了一个结构体和排序

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<stdio.h>
 4 #include<string.h>
 5 #include<math.h>
 6 #include<queue>
 7 #define LL long long
 8 #define PI acos(-1)
 9 #define exp 1e-9
10 #define INF 0x7fffffff
11 using namespace std;
12 priority_queue <int, vector<int>, greater<int> > Q;
13 int tree[110];
14 struct node
15 {
16     int x,y,cost;
17     friend bool operator < (node a, node b)
18     {
19         return a.cost<b.cost;
20     }
21 }list[10000];
22 int findRoot(int x)
23 {
24     if(tree[x]==-1)
25         return x;
26     else
27     {
28         int tmp=findRoot(tree[x]);
29         tree[x]=tmp;
30         return tmp;
31     }
32 }
33  
34 int main()
35 {
36     int n;
37     while(~scanf("%d",&n)&&n)
38     {
39         int m=(n-1)*n/2;
40         for(int i=0; i<m; i++)
41         {
42             scanf("%d %d %d",&list[i].x,&list[i].y,&list[i].cost);
43         }
44         sort(list,list+m);
45         for(int i=1; i<=n; i++)
46             tree[i]=-1;
47         int ans=0;
48         for(int i=0; i<m; i++)
49         {
50             int a=findRoot(list[i].x);
51             int b=findRoot(list[i].y);
52             if(a!=b)
53             {
54                 tree[a]=b;
55                 ans+=list[i].cost;
56             }
57         }
58         printf("%d\n",ans);
59     }
60     return 0;
61 }

题目1016:火星A+B

题目思路很简单,一个素数筛,一个字符串转化为数组并进行模的过程

题目1015:还是A+B

其实就是不断取最后一位的过程

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<stdio.h>
 4 #include<string.h>
 5 #include<math.h>
 6 #include<queue>
 7 #include<set>
 8 #include<map>
 9 #define LL long long
10 #define PI acos(-1)
11 #define exp 1e-9
12 using namespace std;
13 priority_queue <int, vector<int>, greater<int> > Q;
14  
15  
16 int main()
17 {
18     int a,b,k;
19     int a1,b1;
20     while(~scanf("%d %d %d",&a,&b,&k))
21     {
22         if(a==0&&b==0)
23             break;
24         int i;
25         int ans=a+b;
26         for(i=0; i<k; i++)
27         {
28             a1=a%10;
29             b1=b%10;
30             if(a1!=b1)
31                 break;
32             a/=10;
33             b/=10;
34         }
35         if(i==k)
36             printf("-1\n");
37         else
38             printf("%d\n",ans);
39     }
40     return 0;
41  }

 

posted @ 2017-09-14 22:05  娇渣  阅读(165)  评论(0编辑  收藏  举报