Uriel's Corner

Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
posts - 0, comments - 50, trackbacks - 0, articles - 594

这套在交大的题目中算是很水的。。

1. 日期差值
    大水不解释

//2009年上海交通大学计算机研究生机试题 日期差值
#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

int chk(int y) {
    
if(y % 4 == 0{
        
if(y % 400 == 0return 1;
        
else if(y % 100 == 0return 0;
        
else
            
return 1;
    }

    
return 0;
}


int y, yy, m, mm, d, dd;
int mon1[] = {312831303130313130313031};
int mon2[] = {312931303130313130313031};
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, 
0sizeof(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;
}


 


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理