水题qduoj https://qduoj.com/contest/23/

描述
编写一个程序,求两个字符串的最长公共子串。输出两个字符串的长度,输出他们的最长公共子串及子串长度。如果有多个最长公共子串请输出在第一个字符串中先出现的那一个。

特别注意公共子串中可能包含有空格,但不计回车符!

输入
两个字符串,回车结尾,每个字符串中都可能含有空格(每个字符串的长度不超过200个字符)

输出
一共有四行,前两行以Length of String1:和Length of String2:开始冒号后面分别输出两字符串的长度。
第三行Maxsubstring:输出符合题目里描述的子串。第四行是Length of Maxsubstring:加子串长度。注意!冒号后面不要输出多余的空格!

样例输入1
this is a string
my string is abc
样例输出1
Length of String1:16
Length of String2:16
Maxsubstring: string
Length of Maxsubstring:7
样例输入2
abcdef
defabc
样例输出2
Length of String1:6
Length of String2:6
Maxsubstring:abc
Length of Maxsubstring:3
样例输入3
aabbcc
aabbcc
样例输出3
Length of String1:6
Length of String2:6
Maxsubstring:aabbcc
Length of Maxsubstring:6

#include
#include
using namespace std;
int main ()
{
    int t,x;
    cin>>t>>x;
    int i;
    double sum=0.00;
    for(i=1;i<=t;i++)
    {
        sum+=1.0/i;
    }
    printf("%.2lf ",sum);
    double xx=x;
     i=1;
     int ans=0;
    while(xx>0)
    {
        xx-=1.0/i;
        i++;
        ans++;
    }
    printf("%d\n",ans);
}

数字加密
发布时间: 2015年12月13日 20:31 最后更新: 2015年12月26日 22:54 时间限制: 1000ms 内存限制: 128M

描述
输入一个4位数,将其加密后输出。方法是将该数每一位上的数字加9然后除以10取余,作为该位上的新数字,最后将第一位和第三位的数字互换,第二位和第四位上的数字互换,组成加密后的新数。

请按照这样的格式输出: “The encrypted number is 1234”(不输出引号)

输出时请省略前导0。这意味着如果加密后的数字为0123,你需要输出“The encrypted number is 123”

输入
一个四位整数

输出
输出字符串“The encrypted number is ”加经过加密以后的数字

样例输入1
1257
样例输出1
The encrypted number is 4601
样例输入2
1211
样例输出2
The encrypted number is 1

#include
#include
#include
#include
#include
using namespace std;
int main ()
{
    string s;
    cin>>s;
    for(int i=0;i<4;i++)
    {
        s[i]=(s[i]-'0'+9)%10+'0';
    } 
    char ch;
    ch=s[0];
    s[0]=s[2];
    s[2]=ch;
    ch=s[1];
    s[1]=s[3];
    s[3]=ch;
    if(s[0]=='0'&&s[1]=='0'&&s[2]=='0')
    cout<<"The encrypted number is "<3]<else if(s[0]=='0'&&s[1]=='0')
    cout<<"The encrypted number is "<2]<3]<else if(s[0]=='0')
    cout<<"The encrypted number is "<1]<2]<3]<else
    cout<<"The encrypted number is "<

求整数各位数字之和
发布时间: 2015年12月13日 20:49 时间限制: 1000ms 内存限制: 128M

描述
输入整数N,求N的位数以及N各位数字的和。

输入
第一行一个整数T代表测试数据的数量,接下来T行,每行一个整数N。T<1000, N < 10^9

输出
对于每个测试数据输出一行,number=N位数,sum=N各位数字的和

样例输入1
4
123456
-100
-1
99
样例输出1
number=6,sum=21
number=3,sum=1
number=1,sum=1
number=2,sum=18


#include
#include
using namespace std;
int main ()
{
    int n;
    cin>>n;
    while(n--)
    {
        string s;
        int sum=0;
        cin>>s;
        if(s[0]=='-')
            printf("number=%d,",s.size()-1);
        else
            printf("number=%d,",s.size());
        if(s[0]=='-')
        {
            int ans;
            ans=s.size();
            int i;
            for(i=1;i'0';
            }
        }
        else 
        {
            int ans;
            ans=s.size();
            int i;
            for(i=0;i'0';
            }
        }
        printf("sum=%d\n",sum);
    }
}

最大公约数与最小公倍数
发布时间: 2015年12月13日 21:18 最后更新: 2015年12月17日 20:38 时间限制: 1000ms 内存限制: 128M

描述
输入两个正整数使用求他们的最大公约数和最小公倍数。

提示:

1.数据范围很大,请使用尽可能快的算法。

2.请使用long long类型而不是int来存储题目中给出的整数

关于long long 类型的输入输出请见这里,另外在不同的编译器上,long long的输入输出方式会有不同(如在vc 6.0没有long long类型,但是可以使用__int64类型,并用%64d输入输出,但是如果你这样写在本OJ上将会导致错误,因为我们使用gcc和g++作为c和c++的编译器)

输入
两个正整数A和B用空格分开。两数乘积不大于10^18

输出
A和B的最大公约数和最小公倍数,用空格分开,顺序不可颠倒

样例输入1
3 9
样例输出1
3 9
样例输入2
9 5
样例输出2
1 45
样例输入3
200800 400505
样例输出3
5 16084280800

#include  
using namespace std;  
long long e;  
long long fun(long long m,long long n,long long f)  
{  
    int x;  
    x=m%n;  
    while(x)  
    {  
        m=n;  
        n=x;  
        x=m%n;  
    }  
    e=f/n;  
    return n;  
}  
int main()  
{  
    long long m,n,f;  
    cin>>m>>n;  
    f=fun(m,n,m*n);  
    cout<' '<

凯撒密码
发布时间: 2015年12月14日 20:44 最后更新: 2015年12月27日 17:37 时间限制: 1000ms 内存限制: 128M

描述
据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第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

(注意:只有字母会发生替换,其他非字母的字符不变,并且消息原文的所有字母都是大写的。)

在最后一个数据集之后,是另一行:ENDOFINPUT。

输出:

输入
最多不超过100个数据集组成,每个数据集之间不会有空行,每个数据集由3部分组成:
1. 起始行:START
2. 密码消息:由1到200个字符组成一行,表示凯撒发出的一条消息.
3. 结束行:END

输出
每个数据集对应一行,是凯撒的原始消息。

样例输入1
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
样例输出1
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
#include
#include
using namespace std;
char zz[]="VWXYZABCDEFGHIJKLMNOPQRSTU";
int main()
{
    char str[300];
    int i,j=10;
    while(1)
    {
        gets(str);
        if(strcmp(str,"ENDOFINPUT")==0)
            break;
        gets(str);
        int len=strlen(str);
        for(i=0;iif(str[i]>='A'&&str[i]<='Z')
                printf("%c",zz[str[i]-'A']);
            else
                printf("%c",str[i]);
        }
        gets(str);
        printf("\n");
    }
    return 0;
}

最长公共子串
发布时间: 2015年12月17日 09:41 最后更新: 2015年12月29日 20:04 时间限制: 1000ms 内存限制: 128M

描述
编写一个程序,求两个字符串的最长公共子串。输出两个字符串的长度,输出他们的最长公共子串及子串长度。如果有多个最长公共子串请输出在第一个字符串中先出现的那一个。

特别注意公共子串中可能包含有空格,但不计回车符!

输入
两个字符串,回车结尾,每个字符串中都可能含有空格(每个字符串的长度不超过200个字符)

输出
一共有四行,前两行以Length of String1:和Length of String2:开始冒号后面分别输出两字符串的长度。
第三行Maxsubstring:输出符合题目里描述的子串。第四行是Length of Maxsubstring:加子串长度。注意!冒号后面不要输出多余的空格!

样例输入1
this is a string
my string is abc
样例输出1
Length of String1:16
Length of String2:16
Maxsubstring: string
Length of Maxsubstring:7
样例输入2
abcdef
defabc
样例输出2
Length of String1:6
Length of String2:6
Maxsubstring:abc
Length of Maxsubstring:3
样例输入3
aabbcc
aabbcc
样例输出3
Length of String1:6
Length of String2:6
Maxsubstring:aabbcc
Length of Maxsubstring:6

#include
#include
#include
using namespace std;
char str1[250],str2[250];
int dp[250][250];
int main ()
{
    gets(str1);
    gets(str2);
    int i,j;
    int len1=strlen(str1);
    int len2=strlen(str2);
    printf("Length of String1:%d\n",len1);
    printf("Length of String2:%d\n",len2);  
    memset(dp,0,sizeof(dp));
    for(i=0;ifor(j=0;jif(str1[i]==str2[j])
            {
                if(i==0||j==0)
                {
                    dp[i][j]=1;
                }
                else
                {
                    dp[i][j]=dp[i-1][j-1]+1;
                }
            }
            else
            {
                dp[i][j]=0;
            }
        }
    }
    int cnt=0,goodi=0;
    for(i=0;ifor(j=0;jif(dp[i][j]>cnt)
            {
                cnt=dp[i][j];
                goodi=i;
            }
        }
    }
    printf("Maxsubstring:");
    for(i=goodi-cnt+1;i<=goodi;i++)
    {
        printf("%c",str1[i]);
    }
    printf("\n");
    printf("Length of Maxsubstring:%d\n",cnt);
}

救援
发布时间: 2015年12月17日 10:08 最后更新: 2015年12月17日 18:26 时间限制: 1000ms 内存限制: 128M

描述
洪水淹没了很多房子。只有屋顶是安全的。被困的人们都爬上了屋顶。现在救生船每次都从大本营出发,到个屋顶救人,救了人之后将人送回大本营。救生船每次从大本营出发以速度50m/min驶向一个屋顶,救下所有人,然后立刻返回,也就是说救生船每次出动只到一个屋顶救援。每个人上船需要1min下船需要0.5min。船每次都沿着直线行驶且已知大本营到任意屋顶之间的直线上没有其他障碍和其他屋顶。

输入
第一行是一个整数N表示屋顶的数量。接下来N行每行3个整数,x,y,p,分别表示屋顶坐标。数据范围:N不超过100,x,y,p均是整数,且不超过90,x,y的单位是米

输出
输出只有一行,就是所有人都到达大本营并登录所用的时间(以分钟计)

样例输入1
1
50 0 1
样例输出1
3.50

#include
#include
#include
#include
#include
using namespace std;
int xx[200],yy[200],pp[200];
double len[200];
int main ()
{
    int N;
    cin>>N;
    int i;
    for(i=1;i<=N;i++)
    {
        cin>>xx[i]>>yy[i]>>pp[i];
        len[i]=sqrt(xx[i]*xx[i]*1.0+yy[i]*yy[i]*1.0)*2;
    }
    double sum=0.00;
    for(i=1;i<=N;i++)
    {
        sum+=len[i]/50+1.5*pp[i];
    }
    printf("%.2lf\n",sum);
}

矩形剖分
发布时间: 2015年12月17日 18:50 时间限制: 1000ms 内存限制: 128M

描述
对一个给定的矩形,将其划分成尽可能少的正方形,输出正方形的最少个数。如第一个样例,矩形边长为3×4,可以分为一个3×3的正方形和3个1×1的正方形。

输入
只有一行,两个正整数,表示矩形的边长。边长最大不超过100

输出
一个整数,这个矩形最少可以划分为多少个正方形

样例输入1
3 4
样例输出1
4
样例输入2
60 60
样例输出2
1

#include
#include
using namespace std;
int main ()
{
    int n,m;
    cin>>n>>m;
    int minn=0;
    while(n!=m)
    {
        if(n>m)
        {
            n=n-m;
        }
        else
        {
            m=m-n;
        }
        minn++;
    }
    printf("%d\n",minn+1);
}

矩阵鞍点
发布时间: 2015年12月17日 20:27 时间限制: 1000ms 内存限制: 128M

描述
给定一个n×n的矩阵A,矩阵A的鞍点是一个位置(i,j),在该位置上的元素,是第i行上的最小值,第j列上的最大值。一个矩阵A也可能没有鞍点。你的任务是判断一个矩阵是否存在鞍点。

输入
输入数据的第一行是一个整数T(1<=T<=20), 表示接下来有T个矩阵。接下来是T个矩阵的描述。每个矩阵A由若干行组成,第一行上是一个整数n,表示矩阵的秩,接下来n行给出该矩阵的所有元素,一行的元素间使用空格隔开。

输出
对于每个矩阵输出一行,如果该矩阵有鞍点输出”YES”,否则输出”NO”(不包括引号)

样例输入1
2
5
1 6 87 78 89
2 7 45 94 65
3 8 98 34 88
4 9 65 67 50
5 10 3 5 49
2
1 4
2 3
样例输出1
NO
YES

#include
#include
using namespace std;
int main()
{
    int ttt;
    cin>>ttt;
    while(ttt--)
    {
            int n;
    scanf("%d",&n);
    int mmp[n][n];
    int i,j,temp,count,flag=0;
    for(i=0; ifor(j=0; jscanf("%d",&temp);
            mmp[i][j]=temp;
        }
    }
    for(i=0; i0];
        count=0;
        for(j=1;jif(temp>mmp[i][j])
            {   
                temp=mmp[i][j];
                count=j;
            }
        }
        for(j=0;jif(mmp[j][count]>temp)
            {
                flag++; 
            }
        }
        if(flag==0)
        {   
            printf("YES\n");
            break;
        }
        flag=0;
    }
    if(i==n)
    {
        printf("NO\n");
    }
    }
}

你可能感兴趣的:(qduoj)