北理工2018年推免上机考试

1.在日常生活中,我们常常听到这样的话:“X年是自Y年以来降水量最大的一年”,这句话的含义是,X年的降水量不超过Y年,并且对于任意的Y<Z<X,Z年的降水量严格小于X年。

给定一些年份和对应年份的降水量,其中年份是严格递增的,并且给出需要的X年和Y年,对于命题“X年是自Y年以来降水量最大的一年”可能出现三种情况:正确、错误或者存疑,其中“存疑”表示给定数据中存在一些年份的降水量未知,无法判定

第1行给出一个数字n,表示现有的年份及降水量数据个数

第2~n+1行给出年份及降水量,以空格隔开

第n+2行给出测试数据组数

对于每一组,给出年份Y和X,判定命题是否成立,正确输出“true”,错误输出“false”,存疑输出“maybe”

输入示例

5
2001 13
2002 19
2003 17
2004 16
2005 18
1
2002 2005

输出示例

true

AC代码

#include<iostream>
#include<cstring>
using namespace std;
int a[2000];

int main() 
{
    int n;
    cin>>n;
    memset(a,-1,sizeof(a));//初始化为1 
    int fy, y;//first year和year 
    cin>>fy>>a[0];//第一年年份和降水量 
    for(int i=1;i<n;i++)
    {
        int y;
        int drop;
        cin>>y>>drop;
        a[y-fy]=drop;
    }
    int T;//测试数据组数 
    int Y,X;
    cin>>T;
    while(T--)
    {
        cin>>Y>>X;
        Y=Y-fy;
        X=X-fy;
        int flag=1, mflag=0;//是否正确,是否存疑 
        for(int i=Y+1;i<X;i++)
        {
            if(a[i]==-1)mflag=1;
            else if(a[i]>=a[X])flag=0;
        }
        if(flag&&!mflag)cout<<"true"<<endl;
        else if(!flag&&!mflag)cout<<"false"<<endl;
        else if(flag&&mflag)cout<<"maybe"<<endl;
    }
    return 0;
}

2. 对于一些字符串,它总是可以被看成是由自己的某一个子串顺序重复若干次得到的,其中子串是严格小于它本身的,对于给定的字符串,求能重复构成它本身的最小子串。输入一个长度不大于50的字符串,输出重复构成它的最小字串,如果没有,则输出“false”

poj2406  解题思路:设子串长度为i,重复n/i份,n是原字符串长度,比较重复后的字符串与原字符串是否相等。

#include<iostream>
#include<string>
using namespace std;

int main() 
{
    string s;
    cin>>s; 
    int n=s.size(),ans;
    for(int i=1;i<n;i++)//i是重复子串长度 
    {
        string str="", ss="";
        if(n%i==0)
        {
            for(int j=0;j<i;j++)str+=s[j];
            for(int j=0;j<n/i;j++)ss+=str;
            if(ss==s)
            {
                cout<<str<<endl;
                return 0;
            }
        }
    }
    cout<<"false"<<endl;
    return 0;
}

 

posted @ 2019-09-22 16:42  郭怡柔  阅读(296)  评论(0)    收藏  举报