|
Posted on 2011-10-03 00:40 Uriel 阅读(325) 评论(0) 编辑 收藏 引用 所属分类: 考研&保研复试上机题
这套在交大的题目中算是很水的。。
1. 日期差值 大水不解释
//2009年上海交通大学计算机研究生机试题 日期差值 #include<stdio.h> #include<stdlib.h> #include<string.h>
int chk(int y) { if(y % 4 == 0) { if(y % 400 == 0) return 1; else if(y % 100 == 0) return 0; else return 1; } return 0; }
int y, yy, m, mm, d, dd; int mon1[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int mon2[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; char s[20];
int main() { int i; while(~scanf("%s", s)) { y = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + s[3] - '0'; m = (s[4] - '0') * 10 + s[5] - '0'; d = (s[6] - '0') * 10 + s[7] - '0'; scanf("%s", s); yy = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + s[3] - '0'; mm = (s[4] - '0') * 10 + s[5] - '0'; dd = (s[6] - '0') * 10 + s[7] - '0'; int ans = 0; for(i = y + 1; i < yy; ++i) ans += chk(i) + 365; if(y != yy) { for(i = 1; i < mm; ++i) { if(chk(yy)) ans += mon2[i - 1]; else ans += mon1[i - 1]; } ans += dd; for(i = m + 1; i <= 12; ++i) { if(chk(y)) ans += mon2[i - 1]; else ans += mon1[i - 1]; } if(chk(y)) ans += mon2[m - 1] - d + 1; else ans += mon1[m - 1] - d + 1; } else { if(m == mm) { ans += dd - d + 1; } else { if(chk(y)) ans += mon2[m - 1] - d + 1; else ans += mon1[m - 1] - d + 1; ans += dd; for(i = m + 1; i < mm; ++i) { if(chk(yy)) ans += mon2[i - 1]; else ans += mon1[i - 1]; } } } printf("%d\n", ans); } return 0; }
2. 取中值 一开始理解错。。以为是排序后的中值。。
//2009年上海交通大学计算机研究生机试题 取中值 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> using namespace std;
int l1, l2, a[1000010], b[1000010], c[1000010];
int main() { int cse, i, s1, e1, s2, e2, nt; scanf("%d", &cse); while(cse--) { scanf("%d %d", &l1, &l2); for(i = 0; i < l1; ++i) scanf("%d", &a[i]); for(i = 0; i < l2; ++i) scanf("%d", &b[i]); scanf("%d %d", &s1, &e1); scanf("%d %d", &s2, &e2); nt = e1 + e2 - s1 - s2 + 3; nt >>= 1; if(nt <= e1 - s1 + 1) printf("%d\n", a[s1 + nt - 2]); else printf("%d\n", b[s2 + (nt + s1 - e1 - 1) - 2]); } return 0; }
3. 字母统计 大水不解释
//2009年上海交通大学计算机研究生机试题 字母统计 #include<stdio.h> #include<ctype.h> #include<stdlib.h> #include<string.h>
int fg[26]; char s[10000];
int main() { int i; while(gets(s) != NULL) { memset(fg, 0, sizeof(fg)); for(i = 0; s[i]; ++i) { if(isupper(s[i])) fg[s[i] - 'A']++; } for(i = 0; i < 26; ++i) printf("%c:%d\n", i + 'A', fg[i]); } return 0; }
|