筆試題目——程式設計題

readyao發表於2016-03-23

[程式設計題] 小易的升級之路

小易經常沉迷於網路遊戲.有一次,他在玩一個打怪升級的遊戲,他的角色的初始能力值為 a.在接下來的一段時間內,他將會依次遇見n個怪物,每個怪物的防禦力為b1,b2,b3...bn. 如果遇到的怪物防禦力bi小於等於小易的當前能力值c,那麼他就能輕鬆打敗怪物,並 且使得自己的能力值增加bi;如果bi大於c,那他也能打敗怪物,但他的能力值只能增加bi 與c的最大公約數.那麼問題來了,在一系列的鍛鍊後,小易的最終能力值為多少?

輸入描述:
對於每組資料,第一行是兩個整數n(1≤n<100000)表示怪物的數量和a表示小易的初始能力值.
第二行n個整數,b1,b2...bn(1≤bi≤n)表示每個怪物的防禦力


輸出描述:
對於每組資料,輸出一行.每行僅包含一個整數,表示小易的最終能力值

輸入例子:
3 50
50 105 200
5 20
30 20 15 40 100

輸出例子:
110
205

/*************************************************************************
	> File Name: 163_test1.cpp
	> Author: 
	> Mail: 
	> Created Time: 2016年03月22日 星期二 13時55分52秒
 ************************************************************************/

#include <iostream>
#include <vector>
using namespace std;

//求最大公約數
int fun(int v1, int v2)
{
    int max = 0;

    for(int i = 1; i <= v1; ++i){
        if((v1%i == 0) && (v2%i == 0) && (max < i))
            max = i;
    }

    return max;
}

//求最大公約數,和上面的函式功能一樣,方法不一樣
int fun1(int v1, int v2)
{
    int remainder;

    do{
        remainder = v1 % v2;
        v1 = v2;
        v2 = remainder;

    }while(remainder);

    return v1;
}

int main()
{
    int n, a;
    int val;
    vector<int> b;

    while(cin >> n >> a){

        for(int i = 0; i < n; ++i){
            cin >> val;
            b.push_back(val);
        }

        for(int i = 0; i < n; ++i){
            if(b[i] <= a)
                a += b[i];
            else 
                a += fun(a, b[i]);
        }

        cout << a << endl;
        b.clear();
    }

    return 0;
}

[程式設計題] 炮臺攻擊

蘭博教訓提莫之後,然後和提莫討論起約德爾人,談起約德爾人,自然少不了一個人,那 就是黑默丁格------約德爾人歷史上最偉大的科學家. 提莫說,黑默丁格最近在思考一個問題:黑默丁格有三個炮臺,炮臺能攻擊到距離它R的敵人 (兩點之間的距離為兩點連續的距離,例如(3,0),(0,4)之間的距離是5),如果一個炮臺能攻擊 到敵人,那麼就會對敵人造成1×的傷害.黑默丁格將三個炮臺放在N*M方格中的點上,並且給出敵人 的座標. 問:那麼敵人受到傷害會是多大?

輸入描述:
第一行9個整數,R,x1,y1,x2,y2,x3,y3,x0,y0.R代表炮臺攻擊的最大距離,(x1,y1),(x2,y2),
(x3,y3)代表三個炮臺的座標.(x0,y0)代表敵人的座標.


輸出描述:
輸出一行,這一行代表敵人承受的最大傷害,(如果每個炮臺都不能攻擊到敵人,輸出0×)

輸入例子:
1 1 1 2 2 3 3 1 2

輸出例子:
2x

/*************************************************************************
	> File Name: 163_test2.cpp
	> Author: 
	> Mail: 
	> Created Time: 2016年03月22日 星期二 14時19分10秒
 ************************************************************************/

#include <iostream>
#include <math.h>
using namespace std;


int reached(int r, int x1, int y1, int x2, int y2)
{
    if(r >= (sqrt(pow(x1-x2, 2) + pow(y1-y2, 2))))
       return 1;

    else
       return 0;
}

int main()
{
    int r, x1, y1, x2, y2, x3, y3, x0, y0;

    while(cin >> r >> x1 >> y1 >> x2 >> y2 >> x3 >> y3 >> x0 >> y0){
        int br = 0;

        if(reached(r, x1, y1, x0, y0))
            br++;
        if(reached(r, x2, y2, x0, y0))
            br++;
        if(reached(r, x3, y3, x0, y0))
            br++;

        cout << br << "x" << endl;
    }

    return 0;
}

[程式設計題] 掃描透鏡

在N*M的草地上,提莫種了K個蘑菇,蘑菇爆炸的威力極大,蘭博不想貿然去闖,而且蘑菇是隱形的.只 有一種叫做掃描透鏡的物品可以掃描出隱形的蘑菇,於是他回了一趟戰爭學院,買了2個掃描透鏡,一個 掃描透鏡可以掃描出(3*3)方格中所有的蘑菇,然後蘭博就可以清理掉一些隱形的蘑菇. 問:蘭博最多可以清理多少個蘑菇?

輸入描述:
第一行三個整數:N,M,K,(1≤N,M≤20,K≤100),N,M代表了草地的大小;
接下來K行,每行兩個整數x,y(1≤x≤N,1≤y≤M).代表(x,y)處提莫種了一個蘑菇.
一個方格可以種無窮個蘑菇.


輸出描述:
輸出一行,在這一行輸出一個整數,代表蘭博最多可以清理多少個蘑菇.

http://www.nowcoder.com/test/970447/summary

最後一題自己搜,然後到上面連結處提交執行看是否可以通過。

相關文章