Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594
各种大水题。。
1. 字符串的反码
    大水不解释
//2011年吉林大学计算机研究生机试题 字符串的反码
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

int main() {
    
int n, t, p;
    
while(scanf("%d"&n), n) {
        t 
= n; p = 0;
        
while(t > 0) {
            p 
+= t % 10;
            t 
/= 10;
        }
        printf(
"%d ", p);
        t 
= n * n; p = 0;
        
while(t > 0) {
            p 
+= t % 10;
            t 
/= 10;
        }
        printf(
"%d\n", p);
    }
    
return 0;
}


2. 数字之和
    
大水不解释
//2011年吉林大学计算机研究生机试题 数字之和
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

int main() {
    
int n, t, p;
    
while(scanf("%d"&n), n) {
        t 
= n; p = 0;
        
while(t > 0) {
            p 
+= t % 10;
            t 
/= 10;
        }
        printf(
"%d ", p);
        t 
= n * n; p = 0;
        
while(t > 0) {
            p 
+= t % 10;
            t 
/= 10;
        }
        printf(
"%d\n", p);
    }
    
return 0;
}


3. 搬水果
    贪心,每次取数目最少的两堆水果合并
    无聊花了茫茫长时间回忆priority_queue。。。长久不用,重载运算符都不会写了。。有空复习C++去。。
//2011年吉林大学计算机研究生机试题 搬水果 
#include<queue> 
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
using namespace std;

struct Node {
    
int a;
    
bool operator<(const Node &b) const {
        
return a > b.a;
    }
};

int main() {
    
int n, a, b, ans;
    Node tp;
    
while(scanf("%d"&n), n) {
        priority_queue
<Node> que;
        
while(n--) {
            scanf(
"%d"&a);
            tp.a 
= a;
            que.push(tp);
        }
        ans 
= 0;
        
while(que.size() > 1) {
            a 
= que.top().a; que.pop();
            b 
= que.top().a; que.pop();
            ans 
+= a + b;
            tp.a 
= a + b;
            que.push(tp);
        }
        printf(
"%d\n", ans);
    }
    
return 0;
}


4. 堆栈的使用
    STL stack水过
//2011年吉林大学计算机研究生机试题 堆栈的使用
#include<stack>
#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>
using namespace std;

int main() {
    
int q, a;
    
char ch[5];
    
while(scanf("%d"&q), q) {
        stack
<int> stk;
        
while(q--) {
            scanf(
"%s", ch);
            
if(ch[0== 'A') {
                
if(stk.empty()) puts("E");
                
else
                    printf(
"%d\n", stk.top());
            }
            
else if(ch[0== 'O') {
                
if(!stk.empty()) stk.pop();
            }
            
else if(ch[0== 'P') {
                scanf(
"%d"&a);
                stk.push(a);
            }
        }
        puts(
"");
    }
    
return 0;
}


5. 连通图
    裸搜。。无聊回忆了下前向星~
//2011年吉林大学计算机研究生机试题 连通图
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>
#define N 5010
#define M 5010

int n, m, e, ev[M], vis[N], q[N], head[N], nxt[M];

void addedge(int x, int y) {
    ev[e] 
= y; nxt[e] = head[x];
    head[x] 
= e++;
}

void BFS() {
    
int l = 0, r = 1, i;
    q[
0= 1;
    
while(l < r) {
        
for(i = head[q[l]]; ~i; i = nxt[i]) {
            
if(!vis[ev[i]]) {
                vis[ev[i]] 
= 1;
                q[r
++= ev[i];
            }
        }
        
++l;
    }
}

int main() {
    
int i, j;
    
while(scanf("%d %d"&n, &m), n | m) {
        e 
= 0;
        memset(head, 
-1sizeof(head));
        
while(m--) {
            scanf(
"%d %d"&i, &j);
            addedge(i, j);
            addedge(j, i);
        }
        memset(vis, 
0sizeof(vis));
        BFS();
        
for(i = 1; i <= n; ++i) {
            
if(!vis[i]) break;
        }
        
if(i <= n) puts("NO");
        
else
            puts(
"YES");
    }
    
return 0;
}

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理