Posted on 2011-08-26 17:58
Uriel 阅读(200)
评论(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;
}