考研机试题目-清华大学-28道

1.进制转换
题目描述
将M进制的数X转换为N进制的数输出。
输入描述:
输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。

输出描述:
输出X的N进制表示的数。

输入时字母部分为大写,输出时为小写,并且有大数据。

输入例子:
16 10
F

输出例子:
15

#include //万能头文件
using namespace std;//C++固定文法
int main(){
    string S;//声明字符串S
    stack<char> T;//声明字符型栈T
    for(int M,N,lm,i,j,c;cin>>M>>N>>S;cout<//输入M,N,S,没有输入则输出
        lm = S.length();//取S的长度设为lm
        vector<int> V(lm,0);//声明整型向量V
        for(i=0;iisalpha(S[i])?S[i]-'A'+10:S[i]-'0'),++i)//判断是否为字母,是则输出相对A的数值,否则输出相对0的数值
        ;//结束for循环,不执行操作
        for(i=0;i0:++i)
        {
            {
                V[j]+=c*M;
                c=V[j]%N;
                V[j]/=N;//对V[j]进行操作
            }
            T.push(c>9?'a'+c-10:'0'+c);
        }
        for(;T.top()=='0';T.pop()); // trim back zero
        for(;T.size();cout<return 0;
}

2.成绩排序
题目描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96

输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开

输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开

输入例子:
3
0
fang 90
yang 50
ning 70

输出例子:
fang 90
ning 70
yang 50

#include
#include
typedef struct
{
    char name [100];
    int score;
} student;
int main()
{
    student stu[1000];
    student temp;
    int num,way,i=0;
    while (scanf("%d %d", &num, &way) != EOF)
    {
        for(i=0; iscanf("%s%d",&stu[i].name,&stu[i].score);
        if (way==0)
        {
            for (i=0; ifor (int j=0; j1; j++)
                    if (stu[j].score1].score)
                    {
                        temp=stu[j+1];
                        stu[j+1]=stu[j];
                        stu[j]=temp;
                    }
        }
        else if (way==1)
        {
            for (i=0; i1; i++)
                for (int j=0; j1; j++)
                    if (stu[j].score>stu[j+1].score)
                    {
                        temp=stu[j+1];
                        stu[j+1]=stu[j];
                        stu[j]=temp;
                    }
        }
        for (i=0; iprintf("%s %d\n",stu[i].name,stu[i].score);
    }
    return 0;
}

3.约数的个数
输入n个整数,依次输出每个数的约数的个数
输入描述:
输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
当N=0时输入结束。

输出描述:
可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。

输入例子:
5
1 3 4 6 12

输出例子:
1
2
3
4
6

#include
#include
int main()
{
    int n,A[1000],num,sum=0,j=0,i=0;
    while(scanf("%d",&n)!=EOF)
    {
        for (i=0; i0;
            scanf("%d",&num);
            for (j=1; j*jif(num%j==0)sum+=2;
            if (num==j*j) sum++;
            A[i]=sum;
        }
        for (i=0; iprintf("%d\n",A[i]);
    }
    return 0;
}

4.代理服务器
题目描述
使用代理服务器能够在一定程度上隐藏客户端信息,从而保护用户在互联网上的隐私。我们知道n个代理服务器的IP地址,现在要用它们去访问m个服务器。这 m 个服务器的 IP 地址和访问顺序也已经给出。系统在同一时刻只能使用一个代理服务器,并要求不能用代理服务器去访问和它 IP地址相同的服务器(不然客户端信息很有可能就会被泄露)。在这样的条件下,找到一种使用代理服务器的方案,使得代理服务器切换的次数尽可能得少。
输入描述:
每个测试数据包括 n + m + 2 行。
第 1 行只包含一个整数 n,表示代理服务器的个数。
第 2行至第n + 1行每行是一个字符串,表示代理服务器的 IP地址。这n个 IP地址两两不相同。
第 n + 2 行只包含一个整数 m,表示要访问的服务器的个数。
第 n + 3 行至第 n + m + 2 行每行是一个字符串,表示要访问的服务器的 IP 地址,按照访问的顺序给出。
每个字符串都是合法的IP地址,形式为“xxx.yyy.zzz.www”,其中任何一部分均是0–255之间的整数。输入数据的任何一行都不包含空格字符。
其中,1<=n<=1000,1<=m<=5000。

输出描述:
可能有多组测试数据,对于每组输入数据, 输出数据只有一行,包含一个整数s,表示按照要求访问服务器的过程中切换代理服务器的最少次数。第一次使用的代理服务器不计入切换次数中。若没有符合要求的安排方式,则输出-1。

输入例子:
3
166.111.4.100
162.105.131.113
202.112.128.69
6
72.14.235.104
166.111.4.100
207.46.19.190
202.112.128.69
162.105.131.113
118.214.226.52

输出例子:
1

5.反序输出
题目描述
输入任意4个字符(如:abcd), 并按反序输出(如:dcba)
输入描述:
题目可能包含多组用例,每组用例占一行,包含4个任意的字符。

输出描述:
对于每组输入,请输出一行反序后的字符串。
具体可见样例。

输入例子:
Upin
cvYj
WJpw
cXOA

输出例子:
nipU
jYvc
wpJW
AOXc

#include
#include
#include
int main()
{
    char A[100];
    while (scanf("%s",&A)!=EOF)
    {
        //gets(A);
        for (int i=3 ;i>=0;i--)
            printf("%c",A[i]);
        printf("\n");
    }
    return 0;
}

你可能感兴趣的:(机试题目)