zoukankan      html  css  js  c++  java
  • P1047 校门外的树

    题目描述:

    某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是11米。我们可以把马路看成一个数轴,马路的一端在数轴00的位置,另一端在LL的位置;数轴上的每个整数点,即0,1,2,…,L都种有一棵树。

    由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。

    输入格式:第一行有2个整数L(1L10000)和M(1M100),L代表马路的长度,M代表区域的数目,LM之间用一个空格隔开。
    接下来的M行每行包含2个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。

    输出格式:1个整数,表示马路上剩余的树的数目。

    解析:使用遍历,将访问过的点标记为零。注意:注释处

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main()
    {
        int L,M;
        int i,j;
        int vis[10000+10];
        int head,tail; //定义区间的头和尾
        int cnt = 0;   //最后找出的一处错误!没有将cnt初始化为零,所以运行结果出错。(浪费了我好长时间,生气!)
    
        cin >> L >> M;
    
        for( i=0; i<=L; i++)
            vis[i] = 0;      //初始化数组,使其数都为零
    
        for( i=0; i<M; i++)    //循环录入每一段的范围
        {
            cin >> head >> tail;
    
            for( j=head; j<=tail; j++)   //对范围中的数进行遍历
            {
                if( vis[j] == 0)         //(出错处之二!少了一个等号。)如果这个点为零,则说明没有被遍历过,所以赋值为1,说明已经遍历。
    
                    vis[j] = 1;
            }
    
        }
    
        for( i=0; i<=L; i++)       //寻找0——n中,值为零的点,说明其没有被遍历。就是马路剩余的树。(从0开始,因为端点的也有树)
        {
            if( vis[i]==0 )
               {
    
                cnt++;
               }
        }
    
          cout << cnt << endl;
    
        return 0;
    }
  • 相关阅读:
    将字符串按指定间隔分隔
    C#汉字转化为拼音
    Silverlight客户端分页 DataPager控件的使用
    c# EnumUtil
    【AS3代码】通过两者间的距离,检测是否碰撞
    【AS3代码】遮罩用法
    【AS3代码】XML操作
    【AS3代码】数组知识
    【AS3代码】深度的设置
    【AS3代码】模仿现实世界中(地球重力)的甩球游戏
  • 原文地址:https://www.cnblogs.com/18191xq/p/11633053.html
Copyright © 2011-2022 走看看