openjudge1.6 题目合集(08~15)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openjudge1.6 题目合集(08~15)相关的知识,希望对你有一定的参考价值。

08-石头剪刀布

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[10001];
int b[10001];
int now_a[100001];
int now_b[100001];
int ying_a;
int ying_b;
int ping;
int main()
{
    int n;//总共进行了n轮
    int a_z,b_z;//a,b的出拳周期
    cin>>n>>a_z>>b_z;
    for(int i=1;i<=a_z;i++)
    {
    cin>>a[i];
    now_a[i]=a[i];
    }
    for(int i=1;i<=b_z;i++)
    {
        cin>>b[i];    
        now_b[i]=b[i];
    }
    int now=1;
    for(int i=a_z+1;i<=n;i++)
    {
        a[i]=now_a[now];
        if(now==a_z)
        {
            now=1;
        }
        else now++;
    }
    for(int i=a_z+1;i<=n;i++)
    {
        a[i]=now_a[now];
        if(now==a_z)
        {
            now=1;
        }
        else now++;
    }
    for(int i=b_z+1;i<=n;i++)
    {
        b[i]=now_b[now];
        if(now==b_z)
        {
            now=1;
        }
        else now++;
    }
    for(int i=1;i<=n;i++)// 0石头 2剪刀 5布 
    {
        if(a[i]==0&&b[i]==0)
        ping++;
        if(a[i]==0&&b[i]==2)
        ying_a++;
        if(a[i]==0&&b[i]==5)
        ying_b++;
        if(a[i]==2&&b[i]==0)
        ying_b++;
        if(a[i]==2&&b[i]==2)
        ping++;
        if(a[i]==2&&b[i]==5)
        ying_a++;
        if(a[i]==5&&b[i]==0)
        ying_a++;
        if(a[i]==5&&b[i]==2)
        ying_b++;
        if(a[i]==5&&b[i]==5)
        ping++;
    }
    if(ying_a>ying_b)
    {
        cout<<"A";
    }
    else if(ying_a<ying_b)
    {
        cout<<"B";
    }
    else cout<<"draw";
    return 0;
}

 

09-向量点积计算


#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[10001];
int b[10001];
int tot[10001];
long long int ans;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
    }
    for(int i=1;i<=n;i++)
    {
        tot[i]=a[i]*b[i];
    }
    for(int i=1;i<=n;i++)
    {
        ans=tot[i]+ans;
    }
    cout<<ans;
    return 0;
}
 

 

10-大整数加法

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[100001];
char b[100001];
char c[100001];
int a1[100001];
int b1[100001];
int c1[100001];
int main()
{
    scanf("%s",&a);
    scanf("%s",&b);
    int la=strlen(a);
    int lb=strlen(b);
    for(int i=0;i<la;i++)
    a1[i]=a[la-i-1]-0;
    for(int i=0;i<lb;i++)
    b1[i]=b[lb-i-1]-0;
    int x=0;
    int i=0;
    while(i<la||i<lb)
    {
        c1[i]=a1[i]+b1[i]+x;
        x=c1[i]/10;
        c1[i]=c1[i]%10;
        i++;
    } 
    c1[i]=x;
    while(1)
    {
        if(c1[i]==0&&i>=1)
        i--;
        else break;
    }
    
    for(int j=i;j>=0;j--)
    cout<<c1[j];
    return 0;
}

 

11-大整数减法

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a[10001];
char b[10001];
int a1[10001];
int b1[10001];
int c[10001];
int main()
{
    scanf("%s",&a);
    scanf("%s",&b);
    int la=strlen(a);
    int lb=strlen(b);
    if(lb>la||(la==lb&&strcmp(a,b)<0))
    {
        swap(a,b);
        cout<<"-";
    }
    la=strlen(a);
    lb=strlen(b);
    for(int i=0;i<la;i++)
    {
        a1[i]=a[la-i-1]-0;
    }
    for(int i=0;i<lb;i++)
    {
        b1[i]=b[lb-i-1]-0;
    }
    int i=0;//当前位数
    while(i<la)
    {
        if(a1[i]-b1[i]<0)
        {
            a1[i]=a1[i]+10;
            a1[i+1]--;
        }
        c[i]=a1[i]-b1[i];
        i++;    
    } 
    while(1)
    {
        if(c[i]==0&&i>=1)
        i--;
        else break;
    }
    for(int j=i;j>=0;j--)
    cout<<c[j];
    return 0;
}

 

12-计算2的n次方

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
int n;    
int ans[100001]={0,2};
int lans=1;
int main()
{
    int n;
    cin>>n;
    if(n==0)
    {
        cout<<"1";
        return 0;
    }
    else if(n==1)
    {
        cout<<"2";
        return 0;
    }
    else if(n==3)
    {
        cout<<"8";
        return 0;
    }
    for(int i=1;i<=n-1;i++)
    {
        int x=0;
        for(int j=1;j<=lans;j++)
        {
            ans[j]=ans[j]*2+x;
            x=ans[j]/10;
            if(x>0)
            lans++;
            ans[j]=ans[j]%10;
        }
    }
    int flag=0;
    for(int i=lans-1;i>=1;i--)
    {
        if(ans[i]==0&&flag==0)
        continue;
        else flag=1;
        cout<<ans[i];
    }
    return 0;
}

 

13-大整数的因子

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char a1[10001];
int a[10001];
int c[10001];
int tot;
int main()
{
    gets(a1);
    int la=strlen(a1);
    for(int i=0;i<la;i++)
    {
        a[i+1]=a1[i]-48;
    }
    int x=0;//
    for(int j=2;j<=9;j++)
    {
        memset(c,0,sizeof(c));
        x=0;
        for(int i=1;i<=la;i++)
        {
            c[i]=(x*10+a[i])/j;
            x=(x*10+a[i])%j;
        }
        if(x==0)
        {
            tot++;
            cout<<j<<" ";
        }
    }
    if(tot==0)
    {
        cout<<"none";
    }
    /*int lc=1;
    for(int i=1;i<=la;i++)
    {
        if(c[i]==0&&lc<la)
        lc++;
        else break;
    }
    for(int i=lc;i<=la;i++)
    cout<<c[i];
    cout<<endl;
    cout<<x;*/
    return 0;
}

 

14-求10000以内n的阶乘

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int a[1000001]={1};
int ans[10000001]={1};
char n[1001];
int en[1001];
int main()
{
    int n;
    cin>>n;
    int lans=1;
    int x=0;
    for(int i=1;i<=n;i++)
    {
        
        for(int j=0;j<lans;j++)
        {
            a[j]=a[j]*i+x;
            x=a[j]/10;
            if(x>0&&j==lans-1)
            lans++;
            a[j]=a[j]%10;
        }
    }
    int flag=0;
    for(int i=lans;i>=0;i--)
    {
        if(a[i]==0&&flag==0)
        continue;
        else flag=1;
        cout<<a[i];
    }
    return 0;
}

 

15-阶乘和

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int a[10001]={1};
int ans[100001]={0};
char n[1001];
int en[1001];
int lans=1;
int la=1;
int x;
int main()
{
    int n;
    cin>>n;
    int x=0;
    for(int i=1;i<=n;i++)//寻找每一个数 
    {
        memset(a,0,sizeof(a));
        a[0]=1;
        for(int k=1;k<=i;k++)//求阶乘 
        {
            for(int j=0;j<la;j++)
            {
                a[j]=a[j]*k+x;
                x=a[j]/10;
                if(x>0&&j==la-1)
                la++;
                a[j]=a[j]%10;
            }
            
        }
        int l=0;
             x=0;
            while(l<=la||l<=lans)
            {
                ans[l]=ans[l]+a[l]+x;
                x=ans[l]/10;
                if(x>0)
                lans++;
                ans[l]=ans[l]%10;
                l++;
            }
    }
    int flag=0;
    for(int i=lans;i>=0;i--)
    {
        if(ans[i]==0&&flag==0)
        continue;
        else flag=1;
        cout<<ans[i];
    }
    return 0;
}

 

以上是关于openjudge1.6 题目合集(08~15)的主要内容,如果未能解决你的问题,请参考以下文章

中高级面试题题目合集

动态规划题目合集

每日一道 LeetCode (15):二进制求和

2019-2020学年第二学期高等代数课程教学视频网址合集

ctf基于python脚本的sql注入合集(持续更新)

函数易错题目合集