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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com