Posted on 2011-09-24 22:16
Uriel 阅读(226)
评论(0) 编辑 收藏 引用 所属分类:
考研&保研复试上机题
唉。。本来是想找一道菜题秒杀的。。结果纠结了半天。。
1. 统计单词
忘记考虑两个单词间有多个空格的情况,WA*1。。
//2002年华中科技大学计算机研究生机试题 统计单词
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int l[1000];
char s[10000];
int main() {
int i, cnt, ll;
while(gets(s) != NULL) {
cnt = ll = 0;
for(i = 0; s[i]; ++i) {
if(s[i] == ' ' || s[i] =='.') {
if(!ll) continue;
l[cnt] = ll;
cnt ++;
ll = 0;
}
else {
ll++;
}
}
for(i = 0; i < cnt - 1; ++i) printf("%d ", l[i]);
printf("%d\n", l[cnt - 1]);
}
return 0;
}
2. 守形数
大水不解释
//2002年华中科技大学计算机研究生机试题 守形数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n, t;
int main() {
while(~scanf("%d", &n)) {
t = n * n;
while(n > 0) {
if((n % 10) != (t % 10)) break;
n /= 10;
t /= 10;
}
if(!n) puts("Yes!");
else
puts("No!");
}
return 0;
}
3. 二叉树遍历
这题纠结死我了。。RE不下10次。。
理解错题意了输入中的'#'貌似都是空格,貌似还有不合法数据。。坑爹啊。。
//2002年华中科技大学计算机研究生机试题 二叉树遍历
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node{
int l, r;
char c;
}p[40000];
int stp;
char s[40000];
void build(int pt, int lr) {
if(stp >= strlen(s)) return;
else if(s[stp] == ' ' || s[stp] == '#') {
stp++;
return;
}
else {
int rt = stp;
p[stp].c = s[stp];
p[stp].l = p[stp].r = -1;
if(~pt) {
if(!lr) p[pt].l = stp;
else
p[pt].r = stp;
}
++stp;
build(rt, 0);
build(rt, 1);
}
}
void inorder(int idx) {
if(idx == -1) return;
else {
inorder(p[idx].l);
printf("%c ", p[idx].c);
inorder(p[idx].r);
}
}
int main() {
int i;
while(gets(s) != NULL) {
if(!strlen(s) || s[0] == ' ' || s[0] == '#') {
puts("");
continue;
}
stp = 0;
build(-1, -1);
inorder(0);
puts("");
}
return 0;
}