NENU 17级算法学习小组 Round 2 0530

题目链接

密码:12345678

A题:签到题,还是要注意输入的写法,还有就是做题不要用float,最好用double;不要用long,用long long。(有同学用long double,额,这个不怎么用......)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define ll long long
#define inf 100000010
#define maxn 100010
#define PI 3.1415927
using namespace std;
int main()
{
    double r;
    while(scanf("%lf",&r)!=EOF)
    {
        double v=r*r*r*4/3*PI;
        printf("%.3f\n",v+1e-9);
    }
    return 0;
}

B题:简单题。有很多种写法都可以AC。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define ll long long
#define inf 100000010
#define maxn 100010
#define PI 3.1415927
using namespace std;
int main()
{
    int y,m,d;
    char a,b;
    while(scanf("%d%c%d%c%d",&y,&a,&m,&b,&d)!=EOF)
    {
        int ans=0;
        int c[13];
        c[0]=0;
        for(int i=1;i<=12;i++)
        {
            if(i==2)
                continue;
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                c[i]=31;
            else
                c[i]=30;
        }
        if((y%4==0&&y%100!=0)||y%400==0)
            c[2]=29;
        else
            c[2]=28;
        for(int i=0;i<=m-1;i++)
            ans+=c[i];
        ans+=d;
        cout<<ans<<endl;
    }
    return 0;
}

C题:大数阶乘,这题比较难。因为N最大可以是10000,所以N!用long long也存不下,long long最大能存下1e19(差不多),这个时候我们就要用数组来存了,“万进制”了解一下吐舌头。还有就是以后遇到这种连long long都存不下的大数问题,要么是有很巧妙的运算技巧,要么就是用数组来存,这点需要注意一下。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
#define inf 1000010
#define maxn 10010
using namespace std;
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int a[10010];
        a[0]=1;
        int k=0;        //记录位数
        for(int i=1;i<=n;i++)
        {
            int b=0;    //判断是否需要进位
            for(int j=0;j<=k;j++)
            {
                a[j]=a[j]*i+b;
                b=a[j]/10000;
                a[j]%=10000;
            }
            if(b>0)
            {
                k++;
                a[k]=b;
            }
        }
        cout<<a[k];
        for(int i=k-1;i>=0;i--)
            printf("%04d",a[i]);
        cout<<endl;
    }
    return 0;
}

D题:也是签到题。同样需要注意注意输入的写法。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define ll long long
#define inf 100000010
#define maxn 100010
using namespace std;
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
            break;
        double a[110];
        int b=0,c=0,d=0;
        for(int i=0;i<n;i++)
        {
            scanf("%lf",&a[i]);
            if(a[i]<0)
                b++;
            if(a[i]==0)
                c++;
            if(a[i]>0)
                d++;
        }
        cout<<b<<" "<<c<<" "<<d<<endl;
    }
    return 0;
}
E题:简单题。只需要找到最大的字符,记录下来,然后for循环,在最大的字符后边输出(max)即可。
#include<stdio.h>
#include<string.h>
int main()
{
    int i,len,max;
    char str[110];
    while(scanf("%s",str)!=EOF)
    {
        len=strlen(str);
        max=str[0];
        for(i=1;i<len;i++)
            if(str[i]>max)
                max=str[i];
        for(i=0;i<len;i++)
        {   
            printf("%c",str[i]);
            if(str[i]==max)
                printf("(max)");
        }
        printf("\n");
    }
    return 0;
}

F题:简单题。只需要按题意将时间转换一下,然后注意输出格式就行了。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define inf 100000010
#define maxn 100010
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        char a[100];
        cin>>a;
        int year,month,day,hour,minute,second;
        year=(a[0]-48)*1000+(a[1]-48)*100+(a[2]-48)*10+a[3]-48;
        month=(a[5]-48)*10+a[6]-48;
        day=(a[8]-48)*10+a[9]-48;
        hour=(a[11]-48)*10+a[12]-48;
        minute=(a[14]-48)*10+a[15]-48;
        second=(a[17]-48)*10+a[18]-48;
        int h=hour;
        if(hour==0||hour==12)
            hour=12;
        else
            hour%=12;
        printf("%02d/%02d/%04d-%02d:%02d:%02d",month,day,year,hour,minute,second);
        if(h>=0&&h<12)
            cout<<"am"<<endl;
        else
            cout<<"pm"<<endl;
    }
    return 0;
}

G题:本来是个简单题,但是因为输入的格式有很多(主要是空格的位置很皮),要分很多种情况写,这就使这道题变得很复杂,我个人也很烦做这种题难过。你现在看我代码很短,但最开始做的时候,交上就WA了,debug的时候加了很多注释,试了很多种情况.......这道题我的代码写的很乱,这种题最好自己写,最好别看别人的代码,因为看着真的很乱。

如果下边的5组数据都过了,这题基本就过了。

复制双引号里的内容输入。

1:"                 "

    0

2:"     asdf as a"

    3

3:"    asdf    asdf   ds"

    2

4:"asdf   asdf    "

    1

5:直接输入回车

    0

其实还有一个思路:输入数组a,然后对数组a进行一个初始化。把它左边“一连串的”空格赋成'a'(可以是任何字母),再把它右边“一连串的”空格赋成'a'(可以是任何字母),这样就相当于把左右两端的空格给抹去了,对于中间的空格,至于要判断一下a[i]和a[i-1]是否都是空格,如果是的话,ans不加加。

这个题......评测数据有问题,有的同学,代码是错的(上边的第三组测试样例过不了,还有“ a a b",这组样例也过不了),但仍然ac了,还是要注意一下,以后可能就没这么幸运了偷笑

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define inf 100000010
#define maxn 100010
using namespace std;
char a[10000010];
char b[100000][100];
int main()
{
    while(gets(a))
    {
        int len=strlen(a);
        if(strlen(a)==0)
            {cout<<0<<endl;continue;}
        int flaggg=0;
        for(int i=0;i<len;i++)
        {
            if(a[i]!=' ')
                flaggg++;
        }
        if(!flaggg)
            {cout<<0<<endl;continue;}
        if(strcmp(a,"#")==0)
            break;
        memset(b,0,sizeof b);
        len=strlen(a);
        int j=0;
        int k=0;
        int flag=0;
        for(int i=0;i<len;i++)
        {
            if(a[i]!=' ')
                {b[j][k]=a[i];k++;}
            else
            {
                if(i-1>=0&&a[i-1]!=' ')
                    {j++;k=0;}
            }
        }
        flaggg=0;
        for(int i=0;i<strlen(b[j]);i++)
        {
            if(b[j][i]!=' ')
                {flaggg++;break;}
        }
        if(!flaggg)
            j--;
        int ans=0;
        for(int i=0;i<=j;i++)
        {
            int flagg=0;
            for(int k=0;k<i;k++)
            {
                if(strcmp(b[i],b[k])!=0)
                    continue;
                else
                    {flagg++;break;}
            }
            if(!flagg)
                ans++;
        }
        cout<<ans<<endl;
    }
    return 0;
}

H题:这题是个博弈题(八什博弈)。

这里不讲,想看下边的链接,四种博弈的讲解,感觉讲的很不错。

https://blog.csdn.net/ac_gibson/article/details/41624623

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define inf 100000010
#define maxn 100010
using namespace std;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int n,m;
        cin>>n>>m;
        if(n%(m+1)==0)
            cout<<"Rabbit"<<endl;
        else
            cout<<"Grass"<<endl;
    }
    return 0;
}

I题:较难,不过对于学过动态规划的同学来说,这道题真的非常简单,可以说是最基础的动态规划。

这题只需要一层一层往上推即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define inf 100000010
#define maxn 100010
using namespace std;
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int k,a[110][110];
        cin>>k;
        for(int i=1;i<=k;i++)
            for(int j=1;j<=i;j++)
               cin>>a[i][j];
        for(int i=k-1;i>=1;i--)
            for(int j=1;j<=i;j++)
                a[i][j]+=max(a[i+1][j],a[i+1][j+1]);
        cout<<a[1][1]<<endl;
    }
    return 0;
}

J题:找规律题。写出来前几项,发现规律a[n]=a[n-1]+a[n-1](n>=4)。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define inf 100000010
#define maxn 100010
using namespace std;
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[50];
    a[1]=0;
    a[2]=1;
    a[3]=2;
    for(int i=4;i<50;i++)
        a[i]=a[i-1]+a[i-2];
    while(n--)
    {
        int m;
        cin>>m;
        cout<<a[m]<<endl;
    }
    return 0;
}




 
 

 



数据治理是确保数据准确性、可靠性、安全性、可用性和完整性的体系和框架。它定义了组织内部如何使用、存储、保护和共享数据的规则和流程。数据治理的重要性随着数字化转型的加速而日益凸显,它能够提高决策效率、增强业务竞争力、降低风险,并促进业务创新。有效的数据治理体系可以确保数据在采集、存储、处理、共享和保护等环节的合规性和有效性。 数据质量管理是数据治理中的关键环节,它涉及数据质量评估、数据清洗、标准化和监控。高质量的数据能够提升业务决策的准确性,优化业务流程,并挖掘潜在的商业价值。随着大数据和人工智能技术的发展,数据质量管理在确保数据准确性和可靠性方面的作用愈发重要。企业需要建立完善的数据质量管理和校验机制,并通过数据清洗和标准化提高数据质量。 数据安全与隐私保护是数据治理中的另一个重要领域。随着数据量的快速增长和互联网技术的迅速发展,数据安全与隐私保护面临前所未有的挑战。企业需要加强数据安全与隐私保护的法律法规和技术手段,采用数据加密、脱敏和备份恢复等技术手段,以及加强培训和教育,提高安全意识和技能水平。 数据流程管理与监控是确保数据质量、提高数据利用率、保护数据安全的重要环节。有效的数据流程管理可以确保数据流程的合规性和高效性,而实时监控则有助于及时发现并解决潜在问题。企业需要设计合理的数据流程架构,制定详细的数据管理流程规范,并运用数据审计和可视化技术手段进行监控。 数据资产管理是将数据视为组织的重要资产,通过有效的管理和利用,为组织带来经济价值。数据资产管理涵盖数据的整个生命周期,包括数据的创建、存储、处理、共享、使用和保护。它面临的挑战包括数据量的快速增长、数据类型的多样化和数据更新的迅速性。组织需要建立完善的数据管理体系,提高数据处理和分析能力,以应对这些挑战。同时,数据资产的分类与评估、共享与使用规范也是数据资产管理的重要组成部分,需要制定合理的标准和规范,确保数据共享的安全性和隐私保护,以及建立合理的利益分配和权益保障机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值