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. N的阶乘
    标了5星。。偷懒不想写高精度。。JAVA乱搞了。。
    提交完发现目前就我一个偷懒用JAVA的。。不好意思贴代码了。。有空C++再敲一遍高精度。。 
    不知道到时候上机考试的时候能不能交JAVA的。。


2. 最大序列和
    也算是乱搞的。。最后特判下全是负数的情况。。写得很挫。。

//2006年清华大学计算机研究生机试题 最大序列和

#include
<stdio.h>
#include
<stdlib.h>
#define I long long

int n;
I a[
1000010];

int main() {
    
int i;
    
while(~scanf("%d"&n)) {
        I mx 
= - 1<<63LL, tp = 0;
        
for(i = 0; i < n; ++i) {
            scanf(
"%lld"&a[i]);
            
if(tp + a[i] > 0{
                tp 
+= a[i];
                
if(tp > mx) mx = tp;
            }

            
else
                tp 
= 0;
        }

        I mi 
= a[0];
        
for(i = 0; i < n; ++i) {
            
if(a[i] > mi) mi = a[i];
        }

        
if(mi < 0) mx = mi;
        printf(
"%lld\n", mx);
    }

    
return 0;
}



3. 二叉树遍历
    以前POJ上做过。。于是又偷懒了。。囧rz

//2006年清华大学计算机研究生机试题 二叉树遍历

#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>

typedef 
struct Node{
    
char c;
    
struct Node *l, *r;
}
*BTree;

Node 
*Create(char *pre, char *inint n) {
    Node 
*r;
    
char *p;
    
int k;
    
if(n <= 0return NULL;
    r 
= new Node;
    r
->= *pre;
    
for(p = in; p < in + n; ++p)
        
if(*== *pre) break;
    k 
= p - in;
    r
->= Create(pre + 1in, k);
    r
->= Create(pre + k + 1, p + 1, n - k - 1);
    
return r;
}


void PostOrder(BTree T) {
    
if(T) {
        PostOrder(T
->l);
        PostOrder(T
->r);
        putchar(T
->c);
    }

    
else
        
return;
}


int main() {
    
int n;
    
char s1[30], s2[30];
    BTree T;
    
while(gets(s1) != NULL) {
        gets(s2);
        n 
= strlen(s1);
        T 
= Create(s1, s2, n);
        PostOrder(T);
        puts(
"");
        T 
= NULL;
    }

    
return 0;
}



 


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