Posted on 2011-08-26 17:58
Uriel 閱讀(210)
評論(0) 編輯 收藏 引用 所屬分類:
考研&保研復試上機題
這套有點難度。。
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 *in, int n)
{
Node *r;
char *p;
int k;
if(n <= 0) return NULL;
r = new Node;
r->c = *pre;
for(p = in; p < in + n; ++p)
if(*p == *pre) break;
k = p - in;
r->l = Create(pre + 1, in, k);
r->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;
}