2018年蓝桥杯B组JAVA练习心得

1.标题:第几天

2000年的1月1日,是那一年的第1天。
那么,2000年的5月4日,是那一年的第几天?

解法:

直接点开电脑日历或者口算

---------------------------------------------------------------------------

2,.标题:方格计数

如图p1.png所示,在二维平面上有无数个1x1的小方格。


我们以某个小方格的一个顶点为圆心画一个半径为1000的圆。
你能计算出这个圆里有多少个完整的小方格吗? 

解法:

分为4块,拆分为x与y,当对角线小于半径时块数+1,一层一层算

8.小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:

ts id  

表示在ts时刻编号id的帖子收到一个"赞"。  

现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。  

具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。  

给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。  

【输入格式】
第一行包含三个整数N、D和K。  
以下N行每行一条日志,包含两个整数ts和id。  

对于50%的数据,1 <= K <= N <= 1000  
对于100%的数据,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000  

解法:

import java.util.*;
public class No_8_2018
{
    
    public static void main(String args[])
    {
        Scanner s=new Scanner(System.in);
        int k=0,n=0,d=0,ksum=0,maxts=0,mints=0,pidno=0;
        int[] ts,id,flag,pid;
        n=s.nextInt();
        d=s.nextInt();
        k=s.nextInt();                         //输入基本参数
        ts=new int[n];
        id=new int[n];
        flag=new int[n];
        pid=new int[n];
        for(int i=0;i<n;i++)
        {
            flag[i]=0;
        }
        for(int i=0;i<n;i++)
        {
            ts[i]=s.nextInt();
            id[i]=s.nextInt();
        }
        for(int i=0;i<=n-1;i++)
        {
            maxts=ts[i];//确定时间最大和最小,当时间差小于规定时间,才进行输出(这里有点问题,题目要求的是一个区间)
            mints=ts[i];
            if(i==n-1&&flag[i]==0)
            {
                ksum++;
                continue;
            }
            if(flag[i]==1)
            {
                continue;
            }
            ksum++;
            for(int j=i+1;j<n;j++)
            {
                if(id[i]==id[j])
                {
                    ksum++;
                    flag[j]=1;
                    if(ts[i]<ts[j])
                    {
                        maxts=ts[j];
                    }
                    if(ts[i]>ts[j])
                    {
                        mints=ts[i];
                    }
                }
            }
            if(ksum>=k)
            {
                if((maxts-mints)<d)
                {
                    pid[pidno]=id[i];
                    pidno++;
                }
            }
            ksum=0;
        }
        for(int i=0;i<pidno;i++)
        {
            for(int j=0;j<pidno-1-i;j++)
            {
                if(pid[j]>pid[j+1])
                {
                    int temp=0;
                    temp=pid[j];
                    pid[j]=pid[j+1];
                    pid[j+1]=temp;
                }
            }
        }
        for(int i=0;i<pidno;i++)
        {
            System.out.println(pid[i]);
        }   
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值