2020天梯赛训练2 题目整理

7-1 辗转相除法求最大公约数 (10分)

题目链接:
7-1 辗转相除法求最大公约数
代码如下:


import java.util.Scanner;
public class Main {
    public static int gcd(int a,int b)
    {
        return b==0? a:gcd(b,a%b);
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        String[] s_num = s.split(",");
        int[] num = new int[2];
        for (int i=0;i<2;i++) num[i]=Integer.valueOf(s_num[i]);
        System.out.println("gcd="+gcd(num[0],num[1]));
    }
}
7-2 重要的话说三遍 (5分)

题目链接:
重要的话说三遍
代码如下:

import java.sql.SQLOutput;


public class Main {
    public static void main(String[] args) {
        for (int i=0;i<3;i++) System.out.println("I'm gonna WIN!");
    }
}
7-3 后天 (5分)

题目链接:
后天
代码如下:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n =sc.nextInt();
        System.out.println((n+1)%7+1);
    }
}
7-4 谁先倒 (15分)

题目链接:
谁先倒
代码如下:


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int la=sc.nextInt(),lb=sc.nextInt();
        int na=0,nb=0;
        int n=sc.nextInt();
        int flag=0;
        for (int i=0;i<n;i++)
        {
            int ha,da,hb,db;
            ha=sc.nextInt();
            da=sc.nextInt();
            hb=sc.nextInt();
            db=sc.nextInt();
            if(flag>0) continue;
            int j1=0,j2=0;
            if(da==ha+hb) {
                j1=1;

            }
            if(db==ha+hb) {
                j2=1;
            }
            if(j1!=j2)
            {
                if(j1==1) na++;
                else nb++;
            }
            if(na>la) flag=1;
            if(nb>lb) flag=2;
        }
        if(flag==1)
        {
            System.out.println("A");
            System.out.println(nb);
        }
        if(flag==2)
        {
            System.out.println("B");
            System.out.println(na);
        }
    }
}
7-5 输出GPLT (20分)

题目链接:
输出GPLT
代码如下:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s =sc.next();
        s=s.toUpperCase();
        int numg=0,nump=0,numl=0,numt=0;
        for (int i=0;i<s.length();i++)
        {
            char c = s.charAt(i);
            if(c=='G') numg++;
            if(c=='P') nump++;
            if(c=='L') numl++;
            if(c=='T') numt++;
        }
        int ci=0;
        ci=Math.max(ci,numg);
        ci=Math.max(ci,nump);
        ci=Math.max(ci,numl);
        ci=Math.max(ci,numt);
        for (int i=0;i<ci;i++)
        {
            if(numg>0) {
                System.out.print('G');
                numg--;
            }
            if(nump>0) {
                System.out.print('P');
                nump--;
            }
            if(numl>0){
                System.out.print('L');
                numl--;
            }
            if(numt>0){
                System.out.print('T');
                numt--;
            }
        }
        System.out.println();
    }
}
7-6 判断素数 (10分)

题目链接:
判断素数
代码如下:

import java.util.Scanner;
public class Main {
    public static boolean judge(int x)
    {
        if(x==1||x==0) return false;
        if(x==2) return true;
        for(long i=2;i*i<=x;i++)
        {
            if(x%i==0) return false;
        }
        return true;

    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i=0;i<n;i++)
        {
            if(judge(sc.nextInt())) System.out.println("Yes");
            else System.out.println("No");
        }
    }
}
7-7 出租 (20分)

题目链接:
出租
代码如下:

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        int[] vis = new int[10];
        List<Integer> nums = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        for (int i=0;i<s.length();i++)
        {
            vis[s.charAt(i)-'0']++;
        }
        for (int i=9;i>=0;i--)
        {
            if(vis[i]>0) nums.add(i);
        }
        for (int i=0;i<s.length();i++)
        {
            int c = s.charAt(i)-'0';
            for (int j=0;j<nums.size();j++)
            {
                if(nums.get(j)==c) list.add(j);
            }
        }
        System.out.print("int[] arr = new int[]{");
        for (int i=0;i<nums.size();i++)
        {
            System.out.print(nums.get(i));
            if(i<nums.size()-1) System.out.print(",");
        }
        System.out.println("};");
        System.out.print("int[] index = new int[]{");
        for (int i=0;i<list.size();i++)
        {
            System.out.print(list.get(i));
            if(i<list.size()-1) System.out.print(",");
        }
        System.out.println("};");

    }
}
7-8 情人节 (15分)

题目链接:
情人节
代码如下:


import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String a="",b="";
        int i=0;
        while(true)
        {
            String s = sc.next();
            if(s.length()==1&&s.charAt(0)=='.')
            {
                break;
            }
            i++;
            if(i==2) a=s;
            if(i==14) b=s;
        }
        if(a.equals("")) System.out.println("Momo... No one is for you ...");
        else if(b.equals("")) System.out.println(a+" is the only one for you...");
        else System.out.println(a+" and "+b+" are inviting you to dinner...");
    }
}
7-9 图着色问题 (25分)

题目链接:
图着色问题
代码如下:

#include <bits/stdc++.h>
using namespace std;
int v,e,k;
const int maxn=505;
vector<int> edge[maxn];
int col[maxn];
int main()
{
    scanf("%d%d%d",&v,&e,&k);
    for (int i=0;i<e;i++)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        edge[a].push_back(b);
        edge[b].push_back(a);
    }
    int n;
    int kind=0;
    int flag=0;
    int vis[maxn];
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        flag=0;
        kind=0;
        memset(vis,0,sizeof(vis));
        for (int i=1;i<=v;i++)
        {
            int x;
            scanf("%d",&x);
            if(vis[x]==0)
            {
                vis[x]=1;
                kind++;
            }
            col[i]=x;
        }
        if(kind!=k)
        {
            printf("No\n");
            continue;
        }
        for (int j=1;j<=v;j++)
        {
            for (int m=0;m<edge[j].size();m++)
            {
                if(col[edge[j][m]]==col[j])
                {
                    flag=1;
                    break;
                }
            }
            if(flag==1) break;
        }
        if(flag==1) printf("No\n");
        else printf("Yes\n");
    }
    return 0;
}

7-10 点赞狂魔 (25分)

题目链接:
点赞狂魔
代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn=105;
int n;
char name[105][10];
struct peo
{
    char name[10];
    int kind;
    int num;
};
peo a[maxn];
map<int,int>ma[maxn];
int compare(peo a,peo b)
{
    if(a.kind!=b.kind) return a.kind>b.kind;
    return a.kind*1.0/a.num>b.kind*1.0/b.num;
}
int main()
{
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        scanf("%s%d",a[i].name,&a[i].num);
        int kind=0;
        for (int j=0;j<a[i].num;j++)
        {
            int x;
            scanf("%d",&x);
            if(ma[i][x]==0)
            {
                kind++;
            }
            ma[i][x]++;
        }
        a[i].kind=kind;
    }
    sort(a,a+n,compare);
    /*for (int i=0;i<n;i++)
    {
        printf("%s %d %d\n",a[i].name,a[i].kind,a[i].num);
    }*/
    for (int i=0;i<n&&i<3;i++)
    {
        printf("%s%c",a[i].name,i==2?'\n':' ');
    }
    if(n==2) printf("-\n");
    if(n==1) printf("- -\n");
    return 0;
}

7-11 列车调度 (25分)

题目链接:
列车调度
代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n;
int dao[maxn];
int num=0;
int a[maxn];
int Find(int x)
{
    if(x>dao[num-1])
    {
        num++;
        return num-1;
    }
    for (int i=0;i<num;i++)
    {
        if(dao[i]>x) return i;
    }
}
int main()
{
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        int x;
        scanf("%d",&x);
        dao[Find(x)]=x;
    }
    printf("%d\n",num);
    return 0;
}

7-12 愿天下有情人都是失散多年的兄妹 (25分)

题目链接:
愿天下有情人都是失散多年的兄妹
代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxi=1e6+5;
int n;
struct peo
{
    char sex;
    int fid,mid;
};
struct peo id[maxi];
bool Find(int xid,int yid,int num)
{
    if(xid==-1||yid==-1) return true;
    if((id[xid].fid!=-1&&id[xid].fid==id[yid].fid)||(id[yid].mid!=-1&&id[xid].mid==id[yid].mid)) return false;
    num++;
    if(num>=4) return true;
    return Find(id[xid].fid,id[yid].mid,num)&&Find(id[xid].fid,id[yid].mid,num)&&Find(id[xid].mid,id[yid].fid,num)&&Find(id[xid].mid,id[yid].mid,num);
}
int main()
{
    scanf("%d",&n);
    memset(id,-1,sizeof(id));
    for (int i=0;i<n;i++)
    {
        int pid,fid,mid;
        scanf("%d",&pid);
        getchar();
        scanf("%c%d%d",&id[pid].sex,&id[pid].fid,&id[pid].mid);
        if(id[pid].fid!=-1) id[id[pid].fid].sex='M';
        if(id[pid].mid!=-1) id[id[pid].mid].sex='F';
        //printf("sex=%c\n",id[pid].sex);
    }
    int m;
    scanf("%d",&m);
    for (int i=0;i<m;i++)
    {
        int xid,yid;
        scanf("%d%d",&xid,&yid);
        //printf("xid=%c yid=%c\n",id[xid].sex,id[yid].sex);
        if(id[xid].sex==id[yid].sex)
        {
            printf("Never Mind\n");
            continue;
        }
        if(Find(xid,yid,0)) printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

7-13 是否完全二叉搜索树 (30分)

题目链接:
是否完全二叉搜索树
代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn=25;
struct tree
{
    tree* left,*right;
    int val;
    tree(int v,tree* left,tree* right)
    {
        val=v;
        this->left=left;
        this->right=right;
    }
};
int n;
vector<tree*>ans;
tree* root=NULL;
tree* create(tree* t,int val)
{
    if(t==NULL)
    {
        return new tree(val,NULL,NULL);
    }
    if(t->val>val) t->right=create(t->right,val);
    else t->left=create(t->left,val);
    return t;
}
int main()
{
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        int val;
        scanf("%d",&val);
        root = create(root,val);
    }
    int flag=0,tflag=0;
    queue<tree*>q;
    q.push(root);
    while(!q.empty())
    {
        int Size=q.size();
        while(Size--)
        {
            tree* t=q.front();
            ans.push_back(t);
            q.pop();
            if(tflag==1&&(t->left!=NULL||t->right!=NULL)) flag=1;
            if(t->right!=NULL&&t->left==NULL)
            {
                flag=1;
            }
            if(t->right==NULL)
            {
                tflag=1;
            }
            if(t->left!=NULL)
            {
                q.push(t->left);
            }
            if(t->right!=NULL)
            {
                q.push(t->right);
            }
        }
    }
    for (int i=0;i<ans.size();i++)
    {
        printf("%d%c",ans[i]->val,i==ans.size()-1?'\n':' ');
    }
    if(flag==1) printf("NO\n");
    else printf("YES\n");

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值