前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法修炼之练气篇——练气六层

算法修炼之练气篇——练气六层

作者头像
命运之光
发布2024-03-20 10:13:56
970
发布2024-03-20 10:13:56
举报
文章被收录于专栏:我在本科期间写的文章

博主:命运之光 专栏:算法修炼之练气篇 前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的,练完这200多道题就考了今年第十四届的B组蓝桥杯C/C++获得了省一,后面还会更新“算法修炼之筑基篇”里面包括了省赛到国赛这一个月训练的刷奖计划,大概有40道左右,感兴趣的话可以关注一下命运之光)

题目 1099: 校门外的树

题目描述

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

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

输入格式

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

输出格式

输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。

样例输入

500 3 150 300 100 200 470 471

样例输出

298

我们先分析一下题目

具体我想的思路就是:

定义一个数组让它为马路长度,全部为0,如果里面有地铁就定义为1,用count来累加,最后直接两个一减一输出就行了,下来让我们敲敲看有没有什么什么别的问题。

代码

代码语言:javascript
复制
#include<stdio.h>
int a[10005];//L长度<=10000
int main()
{
    int count=0;//这个来计算地铁长度
    int i;//下面要用
    int L,M;
    scanf("%d %d",&L,&M);
    for(i=1;i<=L;i++)//1<=L<=10000题目中马路范围
    {//我感觉从1开始更好理解就将i从1开始了
        a[i]=0;//将马路L赋值为0
    }
    while(M--)//有多少个区域执行几次
    {
        int left,right;//声明区域左值和右值
        scanf("%d %d",&left,&right);
        for(i=left;i<=right;i++)
        {
            //看好了,下来是重点喽,直接解决这个问题
            if(a[i]==0)
            {
                a[i]=1;
                count++;//马路长度递加了哦!很容易吧!
            }
        }
    }
    printf("%d",L-count);//马路长度-地铁长度=剩下的树的数量
    return 0;
}

调试结果

正确答案

298

我的答案

297

我想的解决方法很简单,就是直接加1就行

代码语言:javascript
复制
printf("%d",L-count+1);//马路长度-地铁长度=剩下的树的数量

修改后代码

代码语言:javascript
复制
#include<stdio.h>
int a[10005];//L长度<=10000
int main()
{
    int count=0;//这个来计算地铁长度
    int i;//下面要用
    int L,M;
    scanf("%d %d",&L,&M);
    for(i=1;i<=L;i++)//1<=L<=10000题目中马路范围
    {//我感觉从1开始更好理解就将i从1开始了
        a[i]=0;//将马路L赋值为0
    }
    while(M--)//有多少个区域执行几次
    {
        int left,right;//声明区域左值和右值
        scanf("%d %d",&left,&right);
        for(i=left;i<=right;i++)
        {
            //看好了,下来是重点喽,直接解决这个问题
            if(a[i]==0)
            {
                a[i]=1;
                count++;//马路长度递加了哦!很容易吧!
            }
        }
    }
    printf("%d",L-count+1);//马路长度-地铁长度=剩下的树的数量
    return 0;
}

结果正确

题目 1094: 字符串的输入输出处理

题目描述

字符串的输入输出处理。

输入格式

第一行是一个正整数N,最大为100。之后是多行字符串(行数大于N), 每一行字符串可能含有空格,字符数不超过1000。

输出格式

先将输入中的前N行字符串(可能含有空格)原样输出,再将余下的字符串(不含有空格)以空格或回车分割依次按行输出。每行输出之间输出一个空行。

样例输入

2 www.dotcpp.com DOTCPP A C M D O T CPP

样例输出

www.dotcpp.com DOTCPP

A C M

D

O

T

CPP

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
int main()
{
    char s2[1000];
    string s1;
    int n;
    cin>>n;
    getchar();//吃一个回车符号,因为下面用了一个gets()因为gets()会把回车符也认为是输入 
    while(n--)
    {
        gets(s2);
        cout<<s2<<endl;
        cout<<endl;
    }
    while(cin>>s1)
    {
        cout<<s1<<endl;
        cout<<endl;
    }
    return 0;
}

题目 1072: 汽水瓶

题目描述

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

输入格式

输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出格式

对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

样例输入

3

10

81

0

样例输出

1

5

40

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0)
        {
            return 0;
        }
        printf("%d\n",n/2);
    }
    return 0;
}

题目 1145: C语言训练-自由落体问题

题目描述

一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下,再反弹.求它在第N次落地时共经过多少米?

输入格式

反弹的次数N

输出格式

小球经过的路程(保留四位小数)

样例输入

2

样例输出

200.0000

有特例先解决特例,其余按照找到的规律来

代码语言:javascript
复制
#include<stdio.h>
int main()
{
    int n;//触地次数
    double h=100;//记得用double型,否则答案错误33
    double sum=100;
    int i;
    scanf("%d",&n);
    if(n==1)//先解决特例,这样下面就简单了 
    {
        printf("100.0000");
        return 0;
    }
    for(i=2;i<=n;i++)
    {
        h=h/2;
        sum=sum+2*h;
    }
    printf("%.4lf",sum);
    return 0;
}

题目 1143: C语言训练-素数问题

题目描述

编写一个程序判断一个数是否为素数

输入格式

整数

输出格式

1或0(其中1表示此数为素数,0为表示为不是素数)

样例输入

5

样例输出

1

素数在算法中可以算是一个十分特别的存在了,我们时不时就遇见一个和素数有关的问题,所以常备几种快速解决素数的算法就变得十分的重要。

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int flag=0;
    for(int i=2;i*i<=n;i++)//记得是<=否则会答案错误80,加一个等号就对了
    {
        if(n%i==0)
        {
            flag=1;
        }
    }
    if(flag!=0)
    {
        cout<<"0";
    }
    else
    {
        cout<<"1";
    }
    return 0;
}

🍓🍓今日份修炼结束,再接再厉!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目 1099: 校门外的树
  • 题目描述
  • 输入格式
  • 输出格式
  • 样例输入
  • 样例输出
  • 题目 1094: 字符串的输入输出处理
  • 题目描述
  • 输入格式
  • 输出格式
  • 样例输入
  • 样例输出
  • 题目 1072: 汽水瓶
  • 题目描述
  • 输入格式
  • 输出格式
  • 样例输入
  • 样例输出
  • 题目 1145: C语言训练-自由落体问题
  • 题目描述
  • 输入格式
  • 输出格式
  • 样例输入
  • 样例输出
  • 题目 1143: C语言训练-素数问题
  • 题目描述
  • 输入格式
  • 输出格式
  • 样例输入
  • 样例输出
  • 🍓🍓今日份修炼结束,再接再厉!!!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档