阿里在线测评

Posted 海鲜小王子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里在线测评相关的知识,希望对你有一定的参考价值。

在一个10*10的棋盘上,每个格子有一个分数值(非负整数)。一个棋子从棋盘上的某一个起始位置移动到某一个终止位置。棋子每次在棋盘上可以朝上下左右4个方向移动,一共最多可以移动n步。每移动到一个格子上,则获得格子上相应分数。初始位置的分数自动获得。请问棋子如何移动,才能获得最多分数。建议使用C++。

#include <vector>
#include <time.h>
#include <iostream>  
using namespace std;


typedef struct
    int x;
    int y;
    int score;
Cor;

int solution(int x, int y, int n, int endx, int endy);
int inRange(int x, int y, int minx, int miny, int maxx, int maxy, int endx, int endy, int n, int i);
//10*10的棋盘
int T[10][10] = \\
            6,2,0,9,2,4,8,2,9,4,\\
            6,2,0,9,2,4,8,2,9,4,\\
            6,2,0,9,2,4,8,2,9,4,\\
            6,2,0,9,2,4,8,2,9,4,\\
            6,2,0,9,2,4,8,2,9,4,\\
            6,2,0,9,2,4,8,2,9,4,\\
            6,2,0,9,2,4,8,2,9,4,\\
            6,2,0,9,2,4,8,2,9,4,\\
            6,2,0,9,2,4,8,2,9,4,\\
            6,2,999,9,2,4,8,2,9,4
            ;
int main()

    clock_t start,finish;
    double total;
    start=clock();

    int res = solution(1, 2, 11, 9, 2);

    printf("result:%d", res);
    finish=clock();
    total=(double)(finish-start)/CLOCKS_PER_SEC;  
    return 0;


/*
 *描述:解决棋盘最多分数问题
 *输入: x:起始位置x坐标
 *     y:起始位置y坐标
 *     n:一共走n步
 *     endx:结束位置x坐标
 *     endy:结束位置y坐标
 * 输出:最大分数值
 */
int solution(int x, int y, int n, int endx, int endy)

    vector<Cor> score,score2;
    Cor first;
    first.x = x;
    first.y = y;
    int tt = T[x][y];
    first.score = T[x][y];

    score.push_back(first);

    Cor temp;
    Cor nowCor;
    int i = 1;
    while(i++ <= n) 
        while(!score.empty()) //取出一个Cor,计算下一步的信息
            nowCor = score.back();
            score.pop_back();

            temp = nowCor;
            temp.x++;
            if(inRange(temp.x, temp.y, 0, 0, 9, 9,endx, endy, n, i)) 
                temp.score += T[temp.x][temp.y];
                score2.push_back(temp);
            

            temp = nowCor;
            temp.y++;
            if(inRange(temp.x, temp.y, 0, 0, 9, 9,endx, endy, n, i)) 
                temp.score += T[temp.x][temp.y];
                score2.push_back(temp);
            

            temp = nowCor;
            temp.x--;
            if(inRange(temp.x, temp.y, 0, 0, 9, 9,endx, endy, n, i)) 
                temp.score += T[temp.x][temp.y];
                score2.push_back(temp);
            

            temp = nowCor;
            temp.y--;
            if(inRange(temp.x, temp.y, 0, 0, 9, 9,endx, endy, n, i)) 
                temp.score += T[temp.x][temp.y];
                score2.push_back(temp);
            
            score2.push_back(temp);//把下一步的信息放入score2中
        
        //清空score,score2的内容再放回到score
        score.clear();
        for(vector<Cor>::iterator iter=score2.begin();iter!=score2.end();iter++) 
            score.push_back(*iter);
        
        score2.clear();
    
    //在score中找结束位置符合条件的,且分数最大的
    int tempMax = -1;
    for(vector<Cor>::iterator iter=score.begin();iter!=score.end();iter++) 
        if((*iter).x==endx && (*iter).y==endy) 
            tempMax = (*iter).score > tempMax ? (*iter).score : tempMax;
        
    
    return tempMax;


/*
 *描述:判断输入的坐标是否在棋盘内以及最终是否能达到终点
 *输入: x:位置x坐标
 *     y:位置y坐标
 *     minx:棋盘最小x坐标
 *     miny:棋盘最小y坐标
 *     maxx:棋盘最大x坐标
 *     maxy:棋盘最大y坐标
 *     endx:终点x坐标
 *     endy:终点y坐标
 *     n:一共走n步
 *     i:当前已走了i步
 * 输出:返回判断结果
 */
int inRange(int x, int y, int minx, int miny, int maxx, int maxy, int endx, int endy, int n, int i)

    if((abs(x-endx)+abs(y-endy)) > (n-i+1))
        return 0;
    return x<=maxx && x>=minx && y<=maxy && y>=miny;

以上是关于阿里在线测评的主要内容,如果未能解决你的问题,请参考以下文章

全美在线上云 保证上千考场统一监考

在线测评H5怎么做?

秋招校招,在线测评会不会通不过?

今天做一个测评:阿里云磁盘读写速率测评

Java精品项目源码第64期在线心理测评系统

Java小项目之:在线测评考试系统