您的位置:首页 > 理论基础

2000年清华大学计算机研究生机试真题

2015-04-05 14:53 246 查看
题目连接:点击打开链接

解题思路:

不可以用cin,会超时

完整代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
using namespace std;
const int INF = 1000000000;
const int maxn = 10001;
 char s[maxn];
int main()
{
   #ifdef DoubleQ
   freopen("in.txt" , "r" , stdin);
   #endif // DoubleQ
 
   while(~scanf("%s" , s))
   {
        int len = strlen(s);
        for(int i = len - 1 ; i >= 0 ; i --)
            printf("%c",s[i]);
        printf("\n");
   }
}


题目连接:点击打开链接

解题思路:

暴力枚举

完整代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
using namespace std;
const int INF = 1000000000;
const int maxn = 10001;
 char s[maxn];
int main()
{/*
   #ifdef DoubleQ
   freopen("in.txt" , "r" , stdin);
   #endif // DoubleQ
   */ for(int i = 0 ; i <= 9 ; i ++)
    {
        for(int j = 0 ; j <= 9 ; j ++)
        {
            for(int k = 0 ; k <= 9 ; k ++)
            {
                int a = i * 100 + j * 10 + k;
                int b = j * 100 + k * 10 + k;
                if(a + b == 532)
                {
                    cout << i << " " << j << " " << k << endl;
                }
            }
        }
    }
}


题目连接:点击打开链接

解题思路:

枚举

完整代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
using namespace std;
const int INF = 1000000000;
const int maxn = 10001;
int a[101] , b[101];
 
int check(int key)
{
    int sum = 0;
    for(int i = 1 ; i < key ; i ++)
    {
        if(key % i == 0)
            sum += i;
    }
    if(sum == key)  return 1;
    else if(sum > key)    return 2;
    else return 0;
}
 
 
int main()
{/*
   #ifdef DoubleQ
   freopen("in.txt" , "r" , stdin);
   #endif // DoubleQ
   */
   int cnt1 = 0 , cnt2 = 0;
   for(int i = 2 ; i <= 60 ; i ++)
   {
        if(check(i) == 1)
        {
            a[cnt1++] = i;
        }
        else if(check(i) == 2)
            b[cnt2++] = i;
   }
   cout << "E: ";
   for(int i = 0 ; i < cnt1 ; i ++)
        printf("%d%s" , a[i] , i == cnt1 - 1 ? "\n" : " ");
    cout << "G: ";
    for(int i = 0 ; i < cnt2 ; i ++)
        printf("%d%s" , b[i] , i == cnt2 - 1 ? "\n" : " ");
}


题目连接:点击打开链接

解题思路:

排序

完整代码:

#include <functional>
#include <algorithm>
#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <numeric>
#include <cstring>
#include <climits>
#include <cassert>
#include <complex>
#include <cstdio>
#include <string>
#include <vector>
#include <bitset>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <list>
#include <set>
#include <map>
using namespace std;
 
#pragma comment(linker, "/STACK:102400000,102400000")
 
typedef long long LL;
typedef double DB;
typedef unsigned uint;
typedef unsigned long long uLL;
 
/** Constant List .. **/ //{
 
const int MOD = int(1e9)+7;
const int INF = 0x3f3f3f3f;
const LL INFF = 0x3f3f3f3f3f3f3f3fLL;
const DB EPS = 1e-9;
const DB OO = 1e20;
const DB PI = acos(-1.0); //M_PI;
 
struct node
{
    string s;
    int old;
    int score;
}q[1000001];
 
bool cmp(node a , node b)
{
    if(a.score != b.score)
        return a.score > b.score;
    else if(a.s != b.s)
        return a.s > b.s;
    else
        return a.old > b.old;
}
 
 
int main()
{
    #ifdef DoubleQ
    freopen("in.txt","r",stdin);
    #endif
    int n;
    while(~scanf("%d",&n))
    {
        for(int i = 0 ; i < n ; i ++)
        {
            cin >> q[i].s;
            scanf("%d%d",&q[i].old ,&q[i].score);
        }
        sort(q ,  q + n , cmp);
        for(int i = n - 1 ; i >= 0 ; i --)
        {
            cout << q[i].s << " " << q[i].old << " " << q[i].score << endl;
        }
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: