2014年中南大学上机复试

2014年中南大学复试机试

第一题:成绩转换

题目描述:

某地区中考实行等级选拔制,为此需要将相应科目的卷面计分成绩转换为相应的等级。假设
门课程卷面总分 120 分,根据考试情况,各等级划线情况如下:
108~120 为 A;
100~107 为 B;
80~99 为 C;
72~79 为 D;
0~71 为 E;
输入数据有多组,每组占一行,由一个整数组成。
对于每组输入数据,输出一行。
如果输入数据不在 0~120 范围内,请输出一行:“Score is error!”。

输入输出格式:

输入:
56
67
100
123
输出
E
E
B
Score is error!

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
    int gread;
    while(scanf("%d",&gread)!=EOF){
    
    
        if(gread>=108&&gread<=120) printf("A\n");
        else if(gread>=100&&gread<=107) printf("B\n");
        else if(gread>=80&&gread<=99) printf("C\n");
        else if(gread>=72&&gread<=79) printf("D\n");
        else  if(gread>=0&&gread<=71) printf("E\n");
        else printf("Score is error!\n");
    }
    return 0;
}

第二题:平方和与立方和

题目描述:

给定一段 n 与 m之间连续的整数(包括 n 和 m),求出他们中所有偶数的平方和以及所有奇数的立方和。
输入数据包含多组测试实例,每组测试实例包含一行,两个整数m和 n(0 <= n<= 10000, 0 <= m <= 10000)
对于每组输入数据,输出一行,应包括两个整数 x 和 y,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。

输入输出格式:

输入:
1 3
2 5
输出
4 28
20 152

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
    int n,m;
    while(scanf("%d %d",&n,&m)!=EOF){
    
    
        long long x=0,y=0;
        for(int i=n;i<=m;i++){
    
    
            if(i%2==0) 
                x+=i*i;
            else y+=i*i*i;
        }
        printf("%lld %lld\n",x,y);
    }
    return 0;
}

第三题:破译密码

题目描述:

据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A 都分别替换成字母F)。而你要获得消息原文,也就是要将这个过程反过来。
密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
(注意: 只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。)
最多不超过 100 个数据集组成,每个数据集之间不会有空行,每个数据集由 3 部分组成:
起始行: START
密码消息:由 1 到 200 个字符组成一行,表示凯撒发出的一条消息.
结束行: END
在最后一个数据集之后,是另一行:ENDOFINPUT。
每个数据集对应一行,是凯撒的原始消息。

输入输出格式:

输入:
START
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
END
START
N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
END
START
IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
END
ENDOFINPUT

输出
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME
DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
    char a[201];
    char temp[15];
    scanf("%s",temp);
    getchar();
    while(strcmp(temp,"ENDOF INPUT")){
    
    
        gets(a);
        getchar();
        for(int i=0;i<strlen(a);i++){
    
    
            if((a[i]>64)&&(a[i]<=69))
                a[i]=(char)(a[i]+21);
             else if(a[i]>69&&a[i]<=90)
                a[i]=(char)(a[i]-5);
            else 
                a[i]=a[i];
        }
        scanf("%s",temp);
        printf("%s\n",a);
        scanf("%s",temp);
        getchar();
    }
    return 0;
}

第四题:最大连续子序列

题目描述:

给定 K 个整数的序列{ N1, N2, …, NK } ,其任意连续子序列可表示为{ Ni, Ni+1,…,Nj} ,其中1 <= i<= j <= K。最大连续子序列是所有连续子序列中元素和最大的一个,例如给定序列{ -2, 11, -4, 13, -5, -2 } ,其最大连续子序列为{ 11, -4, 13 } ,最大和为20。编写程序得到其中最大子序列的和并输出该子序列的第一个和最后一个元素的下标。
测试输入包含若干测试用例,每个测试用例占2 行,第 1 行给出正整数 K( <100000) ,第 2 行给出 K 个整数,每个整数的范围-10000至10000 ,中间用空格分隔。
对每个测试用例, 在 1 行里输出最大和、 最大连续子序列的第一个和最后一个元素的下标,中间用空格分隔。 如果最大连续子序列不唯一, 则输出序号 i 和 j 最小的那个(如输入样例的第 2、3组)。若所有 K 个元素都是负数,则定义其最大和为0,输出"0 0 0"。

输入输出格式:

输入:
8
6 -2 11 -4 13 -5 -2 10
20
-10 1 2 3 4 -5 -23 3 7 -21 6 5 -8 3 2 5 0 1 10 3
8
-1 -5 -2 3 -1 0 -2 0
4
-1 -2 -4 -3

输出
27 0 7
27 10 19
3 3 3
0 0 0

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
    int n;
    long long a[10000+100],b[100000+100];
    while(scanf("%d",&n)!=EOF){
    
    
        for(int i=0;i<n;i++)
            scanf("%lld",&a[i]);
            b[0]=a[0];
            for(int i=1;i<n;i++)
                b[i]=b[i-1]+a[i];
            long long min_v=0,max_v=0;
            int min_p=-1,max_l=0,max_r=0;
            for(int i=0;i<n;i++){
    
    
                if(b[i]<min_v){
    
    
                    min_v=b[i];
                    min_p=i;
                }
                if(b[i]-min_v>max_v){
    
    
                    max_v=b[i]-min_v;
                    max_l=min_p+1;
                    max_r=i;
                }
            }
            printf("%lld %d %d\n",max_v,max_l,max_r);
    }
    return 0;
}

第五题:安全路径

题目描述:

卫斯理小说经常提及外星人,比如蓝血人。 在土星星球有很多城市,每个城市之间有一条或多条飞行通道, 但是并不是所有的路都是很安全的,每一条路有一个安全系数 s,s 是在 0和1 间的实数 (包括 0 , 1) ,一条从 u 到 v 的通道 P 的安全度为 Safe§ = s(e1)*s(e2)…s(ek) e1,e2,ek是P 上的边 ,现在蓝血人想出去旅游,面对这这么多的路,他想找一条最安全的路。但是蓝血人的数学不好,想请你帮忙 _
输入包括多个测试实例,每个实例包括:
第一行: 一个整数 n。 n 表示城市的个数 n<=1000;
接着是一个 n
n 的矩阵表示两个城市之间的安全系数, (0可以理解为那两个城市之间没有直接的通道 )。
接着是一个整数m (m<=100)表示若干个蓝血人要旅游的路线 ,下面每行有两个数字,表示蓝血人所在的城市和要去的城市。
如果蓝血人无法达到他的目的地,输出 “What a pity!” ,
其他的输出这两个城市之间的最安全道路的安全系数,保留三位小数。

输入输出格式:

输入:
3
1 0.5 0.5
0.5 1 0.4
0.5 0.4 1
3
1 2
2 3
1 3

输出
0.500
0.400
0.500

#include<bits/stdc++.h>
using namespace std;
int n,m,s,t;
const int N=1005;
double g[N][N],dist[N];
bool st[N];
void dijkstra(int s,int t){
    
    
    memset(dist,0x3f,sizeof(dist));
    for(int i=1;i<=n;i++){
    
    
        st[i]=0;
        dist[i]=g[s][i];
    }
    for(int i=1;i<n;i++){
    
    
        int t=-1;
        for(int j=1;j<=n;j++){
    
    
            if(!st[j]&&(t==-1||dist[t]<dist[j]))
                t=j;
        }
        for(int j=1;j<=n;j++){
    
    
            dist[j]=max(dist[j],dist[t]*g[t][j]);
        }
        st[t]=1;
    }
    if(dist[n]==0x3f3f3f3f) 
        printf("What a pity!\n");
    else
        printf("%.3lf\n",dist[t]);
}
int main(){
    
    
    while (scanf("%d",&n)!=EOF){
    
    
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                scanf("%lf",&g[i][j]);
            scanf("%d",&m);
            while(m--){
    
    
                scanf("%d%d",&s,&t);
                dijkstra(s,t);
        }
    }    
    return 0;
}

欢乐的时光总是短暂的,让我们下一次再见!!!

good good study,day day up! (study hard, improve every day)

预知后事,请听下回分解!!!!

猜你喜欢

转载自blog.csdn.net/qq_41606378/article/details/113729475