|
Posted on 2011-09-27 16:11 Uriel 阅读(522) 评论(2) 编辑 收藏 引用 所属分类: 考研&保研复试上机题
还比较水。。但是罚时茫茫多。。。= = 1. 找位置 nt数组忘记初始化。。OLE*1。。。 PS: 2012.03.05 updated!! 没有重复出现的字母不需要输出!! //2005年华中科技大学计算机保研机试题 找位置 #include<stdio.h> #include<stdlib.h> #include<string.h>
int mk[400],fg[400][100], nt[400]; char s[200];
int main() { int i, j; while(gets(s) != NULL) { memset(mk, 0, sizeof(mk)); memset(fg, -1, sizeof(fg)); memset(nt, 0, sizeof(nt)); for(i = 0; s[i]; ++i) { if(mk[s[i]]) fg[s[i]][nt[s[i]]++] = i; else { mk[s[i]] = 1; fg[s[i]][nt[s[i]]++] = i; } } memset(mk, 0, sizeof(mk)); for(i = 0; s[i]; ++i) { if(!mk[s[i]] && nt[s[i]] > 1) { printf("%c:%d", s[i], fg[s[i]][0]); for(j = 1; j < nt[s[i]]; ++j) printf(",%c:%d", s[i], fg[s[i]][j]); puts(""); mk[s[i]] = 1; } } } return 0; } /************************************************************** Problem: 1199 User: Uriel Language: C++ Result: Accepted Time:30 ms Memory:1172 kb ****************************************************************/
2. 最大的两个数 看错题。。WA*4。。
//2005年华中科技大学计算机保研机试题 最大的两个数 #include<stdio.h> #include<stdlib.h> #include<string.h> #define INF 0x3f3f3f3f int t[4][5], mx[5][2], pos[5][2]; int main() { int i, j, cse, fg; while(~scanf("%d", &cse)) { while(cse--) { for(i = 0; i < 5; ++i) { mx[i][0] = mx[i][1] = -INF; } for(i = 0; i < 4; ++i) { for(j = 0; j < 5; ++j) { scanf("%d", &t[i][j]); if(t[i][j] > mx[j][0]) { mx[j][1] = mx[j][0]; mx[j][0] = t[i][j]; } else if(t[i][j] > mx[j][1]) mx[j][1] = t[i][j]; } } for(i = 0; i < 5; ++i) { for(j = 0; j < 4; ++j) { if(t[j][i] == mx[i][0]) { fg = 0; pos[i][0] = j; break; } else if(t[j][i] == mx[i][1]) { fg = 1; pos[i][0] = j; break; } } for(++j; j < 4; ++j) { if(t[j][i] == mx[i][0] && fg) { pos[i][1] = j; break; } else if(t[j][i] == mx[i][1] && !fg) { pos[i][1] = j; break; } } } for(i = 0; i < 5; ++i) printf("%d ", t[pos[i][0]][i]); puts(""); for(i = 0; i < 5; ++i) printf("%d ", t[pos[i][1]][i]); puts(""); } } return 0; } /**//************************************************************** Problem: 1200 User: Uriel Language: C++ Result: Accepted Time:20 ms Memory:1012 kb ****************************************************************/ 3. 二叉排序树 貌似有0的情况。。一开始若结点数为0直接结束就TLE,改为结点数为0就输出空行就AC
//2005年华中科技大学计算机保研机试题 二叉排序树 #include<stdio.h> #include<stdlib.h> #include<string.h> struct node { int l, r, s; }p[1000]; int n; int ext(int rt, int x) { if(rt == -1) return 0; else if(p[rt].s == x) return 1; else if(x < p[rt].s) return ext(p[rt].l, x); else return ext(p[rt].r, x); } void ins(int idx, int rt, int x) { if(x < p[rt].s) { if(~p[rt].l) ins(idx, p[rt].l, x); else { p[rt].l = idx; p[idx].l = p[idx].r = -1; p[idx].s = x; } } else if(x > p[rt].s) { if(~p[rt].r) ins(idx, p[rt].r, x); else { p[rt].r = idx; p[idx].l = p[idx].r = -1; p[idx].s = x; } } } void preorder(int rt) { if(~rt) { printf("%d ", p[rt].s); preorder(p[rt].l); preorder(p[rt].r); } } void inorder(int rt) { if(~rt) { inorder(p[rt].l); printf("%d ", p[rt].s); inorder(p[rt].r); } } void postorder(int rt) { if(~rt) { postorder(p[rt].l); postorder(p[rt].r); printf("%d ", p[rt].s); } } int main() { int i, a; while(~scanf("%d", &n)) { if(!n) { puts(""); continue; } for(i = 0; i <= n; ++i) p[i].l = p[i].r = -1; scanf("%d", &a); p[0].s = a; for(i = 1; i < n; ++i) { scanf("%d", &a); if(ext(0, a)) continue; else ins(i, 0, a); } preorder(0); puts(""); inorder(0); puts(""); postorder(0); puts(""); } return 0; } /**//************************************************************** Problem: 1201 User: Uriel Language: C++ Result: Accepted Time:100 ms Memory:1024 kb ****************************************************************/ 4. 排序 大水不解释
//2006年华中科技大学计算机保研机试题 二叉排序树 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> using namespace std; int a[120], n; int main() { int i; while(~scanf("%d", &n)) { for(i = 0; i < n; ++i) { scanf("%d", &a[i]); } sort(a, a + n); for(i = 0; i < n; ++i) printf("%d ", a[i]); puts(""); } return 0; } /**//************************************************************** Problem: 1202 User: Uriel Language: C++ Result: Accepted Time:40 ms Memory:1012 kb ****************************************************************/ 5. IP地址 大水不解释
//2006年华中科技大学计算机保研机试题 IP地址 #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { int cse, a, b, c, d; scanf("%d", &cse); while(cse--) { scanf("%d.%d.%d.%d", &a, &b, &c, &d); if(a >= 0 && a <= 255 && b >= 0 && b <= 255 && c >= 0 && c <= 255 && d >= 0 && d <= 255) puts("Yes!"); else puts("No!"); } return 0; } /**//************************************************************** Problem: 1203 User: Uriel Language: C++ Result: Accepted Time:10 ms Memory:1012 kb ****************************************************************/
Feedback
# re: 华中科技大学计算机研究生机试题-2005,2006年[未登录] 回复 更多评论
2012-03-05 19:40 by
同学,貌似1199找位置那个题rejudge了,你的代码好像不行哦。 话说,那题题意不清啊,大小写字母区分不?
# re: 华中科技大学计算机研究生机试题-2005,2006年 回复 更多评论
2012-03-05 21:44 by
@ZAKIR 是的,Rejudge了,我已经update了,现在这个代码可以AC
|