• c++实现一个小算法


    题目:有n个格子,每个格子里有坦克,坦克有两滴血,你向格子里投掷炸弹,每次命中坦克他掉一滴血并随机像左或者右移动一个格子,问最少炸几次能把全部坦克炸完。

    题解:先向偶数格子投掷炸弹,所有的坦克全跑到奇数格子里,然后再向奇数格子里投掷炸弹,消灭掉之前偶数格子里的坦克并且所有的坦克全跑到偶数格子里,再向偶数格子投掷炸弹,消灭所有坦克。次数为n+(int)n/2;

    代码如下:

    /*包含c++的所有头文件*/ 
    #include <bits/stdc++.h> using namespace std;
    /*
    vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.
    声明一个int向量以替代一维的数组:vector<int> v(等于声明了一个int数组v[],大小没有指定,可以动态的向里面添加删除)
    */
    vector<int> v; int main(){ int n;
    /*
          cin>> 和 cout<< 是c++语言的标准输入输出流。cin>>n的意思是输入数据到变量n
    */
    cin>>n; for(int i=2;i<=n;i+=2)
        /*
           push_back()在数组的最后添加一个数据
        */  
    v.push_back(i); for(int i=1;i<=n;i+=2) v.push_back(i); for(int i=2;i<=n;i+=2) v.push_back(i);
        /*
           size()当前使用数据的大小
           首先输出数组v当前的数据大小,然后输出一个换行符
           c++里的标准输出语句,例如:
              #include <iostream.h>
                void mian()
                {
                int x=100;
                cout<<x<<endl<<x;
                }

            编译执行后你将看到的结果是:
              100
              100

          "cout<<x<<endl可以翻看来看,首先输出x变量的值,然后输出一个换行符,最后在输出一次x变量的值(只有基本数据类型以及字符串数组可以直接用cout输出)。
    */
    cout<<v.size()<<endl;
    /*
    it是定义的迭代器,迭代器其实是一种指针,++it操作的是指针的地址值
    auto关键字会根据v.begin()的返回值类型自动推断变量it的数据类型
    */
    /*
          begin()得到数组头的指针 end()得到数组的最后一个单元+1的指针
    */
    for(auto it=v.begin();it!=v.end();++it) cout<<*it<<' ';
    /* 程序输出结束 */
    cout<<endl;
    }

    关于vector容器,详见:http://blog.csdn.net/hancunai0017/article/details/7032383

  • 相关阅读:
    Codeforces 877 C. Slava and tanks
    Codeforces 877 D. Olya and Energy Drinks
    2017 10.25 NOIP模拟赛
    2017 国庆湖南 Day1
    UVA 12113 Overlapping Squares
    学大伟业 国庆Day2
    51nod 1629 B君的圆锥
    51nod 1381 硬币游戏
    [JSOI2010]满汉全席
    学大伟业 2017 国庆 Day1
  • 原文地址:https://www.cnblogs.com/leibao/p/8474048.html
Copyright © 2020-2023  润新知