团体程序设计天梯赛-练习集

L1-002 打印沙漏 (20 分) 

思路:找规律

#include <stdio.h>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
#include <stack>
#include <string>
#include <cstring>
#include <vector>
#include <list>
#include <cstdlib>
#include <set>
#include <queue>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define FASTIO std::ios::sync_with_stdio(false);
#define PII pair<int,int>
typedef long long ll;
const int maxx=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
int n;
char c;
void solve()
{
    scanf("%d %c",&n,&c);
    int l=sqrt((n+1)/2.0);
    for(int i=l;i>=1;i--)
    {
        for(int j=1;j<=l-i;j++) printf(" ");
        for(int j=1;j<=2*i-1;j++) printf("%c",c);
        printf("\n");
    }
    for(int i=2;i<=l;i++)
    {
        for(int j=1;j<=l-i;j++) printf(" ");
        for(int j=1;j<=2*i-1;j++) printf("%c",c);
        printf("\n");
    }
    printf("%d",n-(2*l*l-1));
}
int main()
{
    int _t=1;
    //scanf("%d",&_t);
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-009 N个数求和 (20 分) 

思路:分数求和,分数化简

#include <stdio.h>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
#include <stack>
#include <string>
#include <cstring>
#include <vector>
#include <list>
#include <cstdlib>
#include <set>
#include <queue>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define FASTIO std::ios::sync_with_stdio(false);
#define PII pair<int,int>
typedef long long ll;
const int maxx=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
int n;
void add(ll *fz,ll *fm,ll *z,ll *m)
{
    *fz=(*fz)*(*m)+(*z)*(*fm);
    *fm=(*fm)*(*m);
}
ll gcd(ll a,ll b)
{
    return b? gcd(b,a%b):a;
}
void simply(ll *fz,ll *fm)//分数化简
{
    ll tt=gcd(*fz,*fm);//最大公约数
    *fz=*fz/tt;
    *fm=*fm/tt;
}
void solve()
{
    scanf("%d",&n);
    ll fz=0,fm=0;
    scanf("%lld/%lld",&fz,&fm);
    for(int i=2;i<=n;i++)
    {
        ll z,m;
        scanf("%lld/%lld",&z,&m);
        add(&fz,&fm,&z,&m);
        simply(&fz,&fm);
    }
    ll a=0;//整数部分
    a=fz/fm;
    fz%=fm;
    simply(&fz,&fm);//再次化简
    if(a) printf("%lld",a);
    if(fz&&a) printf(" %lld/%lld",fz,fm);
    else if(fz&&!a) printf("%lld/%lld",fz,fm);
    else if(!fz&&!a) printf("0");
}
int main()
{
    int _t=1;
    //scanf("%d",&_t);
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-011 A-B (20 分) 

#include <stdio.h>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
#include <stack>
#include <string>
#include <cstring>
#include <vector>
#include <list>
#include <cstdlib>
#include <set>
#include <queue>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define FASTIO std::ios::sync_with_stdio(false);
#define PII pair<int,int>
typedef long long ll;
const int maxx=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
string a,b;
void solve()
{
    getline(cin,a);
    getline(cin,b);
    int len1=a.length(),len2=b.length();
    for(int i=0;i<len1;i++)
    {
        int flag=0;
        for(int j=0;j<len2;j++)
        {
            if(a[i]==b[j])
            {
                flag=1;
                break;
            }
        }
        if(!flag) cout<<a[i];
    }
}
int main()
{
    int _t=1;
    //scanf("%d",&_t);
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-015 跟奥巴马一起画方块 (15 分) 

知识点:四舍五入 int l=x+0.5;//对x进行四舍五入 

#include <stdio.h>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
#include <stack>
#include <string>
#include <cstring>
#include <vector>
#include <list>
#include <cstdlib>
#include <set>
#include <queue>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define FASTIO std::ios::sync_with_stdio(false);
#define PII pair<int,int>
typedef long long ll;
const int maxx=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
int n;
char c;
void solve()
{
    scanf("%d %c",&n,&c);
    double x=n*0.5;
    int l=x+0.5;//x进行四舍五入
    for(int i=1;i<=l;i++)
    {
        for(int j=1;j<=n;j++)
        {
            printf("%c",c);
        }
        printf("\n");
    }
}
int main()
{
    int _t=1;
    //scanf("%d",&_t);
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-020 帅到没朋友 (20 分)

思路:只要朋友圈人数大于1,就把这些人标记成不帅。注意答案的格式,空格的输出。

#include <stdio.h>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
#include <stack>
#include <string>
#include <cstring>
#include <vector>
#include <list>
#include <cstdlib>
#include <set>
#include <queue>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define FASTIO std::ios::sync_with_stdio(false);
#define PII pair<int,int>
typedef long long ll;
const int maxx=1e5+10;
const int inf=0x3f3f3f3f;

using namespace std;
int n,m;
int a[maxx];
void solve()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int num;
        scanf("%d",&num);
        for(int j=1;j<=num;j++)
        {
            int p;
            scanf("%d",&p);
            if(num>1) a[p]=1;//朋友圈人数大于1,这人不帅的
        }
    }
    int t=0;
    scanf("%d",&m);
    while(m--)
    {
        int id;
        scanf("%d",&id);
        if(a[id]==0)
        {
            if(t!=0) printf(" ");
            t++;
            printf("%05d",id);//’%05d’,5为要求输出位数,0为补位字符 。
            a[id]=1;//输出后,做标记,避免重复查询 
        }
    }
    if(t==0) printf("No one is handsome");
}
int main()
{
    int _t=1;
    //scanf("%d",&_t);
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-027 出租 (20 分) 

思路:把用到的数字存到arr中,然后遍历电话号码,找到下标

#include <stdio.h>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <map>
#include <stack>
#include <string>
#include <cstring>
#include <vector>
#include <list>
#include <cstdlib>
#include <set>
#include <queue>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define FASTIO std::ios::sync_with_stdio(false);
#define PII pair<int,int>
typedef long long ll;
const int maxx=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
bool vis[10];
string s;
int arr[15];
int idx[15];
void solve()
{
    cin>>s;
    int len=s.length();
    for(int i=0;i<len;i++)
    {
        vis[s[i]-'0']=1;
    }
    int cnt=0;
    for(int i=9;i>=0;i--)
    {
        if(vis[i]) arr[cnt++]=i;
    }
    int t=0;
    for(int i=0;i<len;i++)
    {
        for(int j=0;j<cnt;j++)
        {
            if(arr[j]==s[i]-'0')
            {
                idx[t++]=j;
                break;
            }
        }
    }
    printf("int[] arr = new int[]{");
    for(int i=0;i<cnt;i++) printf("%d%c",arr[i],",}"[i==cnt-1]);
    printf(";\nint[] index = new int[]{");
    for(int i=0;i<t;i++) printf("%d%c",idx[i],",}"[i==t-1]);
    printf(";");
}
int main()
{
    int _t=1;
    //scanf("%d",&_t);
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-006 连续因子 (20 分)

题意:给你整数n,求最长的连续因子个数,并输出最小的连续因子

注意:单独输出素数情况

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;

int n;
void solve()
{
    cin>>n;
    int cnt=0,mcnt=0,start=0;//mcnt最大的连续因子个数
    for(int i=2;i<=sqrt(n);i++)
    {
        int x=n;
        int j=i;
        cnt=0;
        while(x%j==0)
        {
            x/=j;
            j++;
            cnt++;
        }
        if(cnt>mcnt)
        {
            mcnt=cnt;
            start=i;
        }
    }
    
    if(mcnt)//不是素数
    {
        cout<<mcnt<<'\n';
        for(int i=start;i<start+mcnt;i++)
        {
            if(i==start) cout<<i;
            else cout<<'*'<<i;
        }
        cout<<'\n';
    }
    else cout<<1<<'\n'<<n<<'\n';
}
int main()
{
    //ios;
    int _t=1;
    //cin>>_t;
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-016 查验身份证 (15 分)

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
int q[20]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
map<int,char>m;
int n,ans;
void solve()
{
    m[0]='1',m[1]='0',m[2]='X',m[3]='9';
    m[4]='8',m[5]='7',m[6]='6',m[7]='5';
    m[8]='4',m[9]='3',m[10]='2';
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        string s;
        cin>>s;
        int z=0;
        for(int j=0;j<17;j++)
        {
            z+=(s[j]-'0')*q[j];
        }
        z=z%11;
        char op=m[z];
        if(s[17]!=op)
        {
            ans++;
            cout<<s<<'\n';
        }
    }
    if(ans==0) cout<<"All passed\n";
}
int main()
{
    //ios;
    int _t=1;
    //cin>>_t;
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-043 阅览室 (20 分)

题意:

注意:(1)一本书在一天中可能会被多次借阅。

           (2)若SSSE则计算的是最后一个SE

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;

void solve()
{
    int n;
    cin>>n;
    while(n--)
    {
        int time[1010]={0};//每天要清空数组
        bool vis[1010]={0};//vis[i]=1表示第i本书被借了
        int sum=0,cnt=0;//总时长,借阅次数
        int num=0,h,m;
        char op;
        while(scanf("%d %c %d:%d",&num,&op,&h,&m))
        {
            if(num==0) break;
            
            if(op=='S')
            {
                vis[num]=1;
                time[num]=h*60+m;
            }
            else if(op=='E'&&vis[num])//这个if的 判断必须加上vis[num] 
            {
                cnt++;
                sum+=h*60+m-time[num];
                vis[num]=0;//这一步很重要
                time[num]=0;
            }
        }
        if(cnt==0) cout<<0<<' '<<0<<'\n';
        else 
        {
            cout<<cnt<<' ';
            printf("%.0f\n",1.0*sum/cnt);
        }
    }
}
int main()
{
    //ios;
    int _t=1;
    //cin>>_t;
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

 L1-046 整除光棍 (20 分)

 思路:模拟竖式除法,直至余数为0;余数不为零时,那么增加一位1,使余数*10+1.

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
int x;
void solve()
{
    cin>>x;
    int s=1;
    int cnt=1;
    while(s<x)
    {
        s=s*10+1;
        cnt++;
    }
    while(1)
    {
        cout<<s/x;
        if(s%x==0) break;
        s=s%x*10+1;
        cnt++;
    }
    cout<<' '<<cnt<<'\n';

}
int main()
{
    //ios;
    int _t=1;
    //cin>>_t;
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-049 天梯赛座位分配 (20 分)

 

 

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
int d[110];
int a[110][110][15];
void solve()
{
    int n;
    cin>>n;
    int maxd=-inf;//记录最大队伍数量
    for(int i=1;i<=n;i++)
    {
        cin>>d[i];
        maxd=max(maxd,d[i]);
    }

    int lasti=-1;
    int num=0;
    for(int j=1;j<=maxd;j++)//当前要处理的队伍编号
    {
        for(int k=1;k<=10;k++)//队员编号
        {
            for(int i=1;i<=n;i++)//遍历每个学校
            {
                if(j<=d[i])//此学校需要处理
                {
                    if(lasti==i)
                    {
                        num+=2;          
                    }
                    else num++;
                    a[i][j][k]=num;
                    lasti=i;//记录上一次处理的学校编号
                }
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        cout<<"#"<<i<<'\n';
        for(int j=1;j<=d[i];j++)
        {
            for(int k=1;k<=10;k++)
            {
                cout<<a[i][j][k]<<" \n"[k==10];
            }
        }
    }
}
int main()
{
    //ios;
    int _t=1;
    //cin>>_t;
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-056 猜数字 (20 分)

 

 

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e4+10;
const int inf=0x3f3f3f3f;

using namespace std;
struct node{
    string name;
    int num;
}a[N];
int n;
void solve()
{
    cin>>n;
    double ans=0;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].name>>a[i].num;
        ans+=a[i].num;
    }
    int tt=ans/n/2;
    int idx=-1;
    int mi=inf;
    for(int i=1;i<=n;i++)
    {
        if(abs(tt-a[i].num)<=mi)
        {
            mi=abs(tt-a[i].num);
            idx=i;
        }
    }
    cout<<tt<<' '<<a[idx].name<<'\n';
}
int main()
{
    //ios;
    int _t=1;
    //cin>>_t;
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

L1-059 敲笨钟 (20 分)

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
string s;
bool check(int pos)
{
    if(s[pos]=='g'&&s[pos-1]=='n'&&s[pos-2]=='o') return true;
    return false;
}
void solve()
{
    int n;
    cin>>n;
    getchar();
    for(int i=1;i<=n;i++)
    {
        s.clear();
        getline(cin,s);
        int len=s.length();
        int pos=0;
        for(int j=0;j<len;j++)
        {
            if(s[j]==',')
            {
                pos=j;
                break;
            }
        }
        if(check(len-2)&&check(pos-1))
        {
            int cnt=0,pp=0;
            for(int j=len-1;j>=0;j--)
            {
                if(s[j]==','||s[j]==' ')
                {
                    cnt++;
                    pp=j;
                }
                if(cnt==3) break;
            }
            cout<<s.substr(0,pp+1)<<"qiao ben zhong.\n";
        }
        else cout<<"Skipped\n";
    }
}
int main()
{
    //ios;
    int _t=1;
    //cin>>_t;
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

 L1-064 估值一亿的AI核心代码 (20 分)

 

#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
#define endl '\n'
#define sf(x) scanf("%d",&x)
#define rep(i,x) for(i=0;i<(x);i++)
#define gen(x) x##_
#define ios std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define PII pair<int,int>
typedef long long ll;
const int N=1e6+10;
const int inf=0x3f3f3f3f;

using namespace std;
string s;
void solve()
{
    int n;
    cin>>n;
    getchar();
    for(int i=1;i<=n;i++)
    {
        s.clear();
        getline(cin,s);

        cout<<s<<'\n';

        s.erase(0,s.find_first_not_of(' '));
        s.erase(s.find_last_not_of(' ')+1);
        
        for(int j=0;j<s.length();j++)//去掉大写和其他多余空格
        {
            if(isalnum(s[j]))//数字字母
            {
                if(s[j]!='I')
                {
                    s[j]=tolower(s[j]);
                }
            }
            else if(s[j]==' ')//空格
            {
                if(j<s.length()&&s[j+1]==' ')
                {
                    s.erase(j,1);
                    j--;
                }
            }
            else//其他字符
            {
                if(s[j]=='?') s[j]='!';
                if(j-1>=0&&s[j-1]==' ')
                {
                    s.erase(j-1,1);
                    j--;
                }
            }
        }

        for(int beg=0;;beg++)
        {
            beg=s.find("can you",beg);
            if(beg==-1) break;
            if((!beg||!isalnum(s[beg-1]))&&(beg+7==s.length()||!isalnum(s[beg+7])))
            {
                s.replace(beg,7,"A can");
            }
        }
        for(int beg=0;;beg++)
        {
            beg=s.find("could you",beg);
            if(beg==-1) break;
            if((!beg||!isalnum(s[beg-1]))&&(beg+9==s.length()||!isalnum(s[beg+9])))
            {
                s.replace(beg,9,"A could");
            }
        }
        for(int beg=0;;beg++)
        {
            beg=s.find("I",beg);
            if(beg==-1) break;
            if((!beg||!isalnum(s[beg-1]))&&(beg+1==s.length()||!isalnum(s[beg+1])))
            {
                s.replace(beg,1,"you");
            }
        }
        for(int beg=0;;beg++)
        {
            beg=s.find("me",beg);
            if(beg==-1) break;
            if((!beg||!isalnum(s[beg-1]))&&(beg+2==s.length()||!isalnum(s[beg+2])))
            {
                s.replace(beg,2,"you");
            }
        }
        for(int i=0;i<s.length();i++)
        {
            if(s[i]=='?') s[i]='!';
            if(s[i]=='A') s[i]='I';
        }
        cout<<"AI: "<<s<<'\n';
    }
}
int main()
{
    //ios;
    int _t=1;
    //cin>>_t;
    while(_t--)
    {
        solve();
    }
    system("pause");
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值