vjudge-A-这是测试你会不会语言的模拟

2017-07-14 18:13:35

  • writer:pprp
  • 介绍:最基本用代码展示思想的一道题
  • 题意如下;
  • 他细细观察了自己的工作环境,发现整个工作室是一个N行M列的矩形布局,或者是因为屌丝的本性逐步暴露,他还暗自给每个同事在心里进行了魅力值评分(为区别男女,男生一律用负整数表示,女生一律用正整数表示)。 
      现在,小Q把所有人的数据记录下来,并且这样定义一个位置的价值: 
      1、一个位置的价值只和其上下左右四个邻居的魅力值有关(对于靠边的位置,只考虑其存在的邻居); 
      2、如果某位置的邻居和该位置主人性别不同,则总分加上邻居魅力值的绝对值,否则减去; 
      3、对周围所有邻居的数据处理后,最终的得分即为这个位置的最终得分,得分越高,则该位置越好; 

      现在你能帮助小Q计算一下哪里才是最佳位置吗?

    Input输入包含多组测试数据; 
    每组测试数据的第一行包含2个整数N和M,表示工作室的布局是N行M列; 
    接下来的N行,每行有M个整数,分别表示对应位置员工的魅力值数据Ki,正整数表示女生的魅力值,负整数表示男生的魅力值; 
    N和M为0的时候表示输入数据结束。

    TechnicalSpecificationTechnicalSpecification 
    N<=20 
    M<=20 
    -100<=Ki<=100 
    Output请计算并输出最佳位置的行列号以及对应的得分,如果得分最高的位置有多个,则请输出行号最小的那个,行号还相同的话,再比较列号,只输出列号最小的那个即可。 
    Sample Input

    2 3
    5 -4 3
    -6 3 7
    0 0

    Sample Output

    1 2 11
  • #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
        int N,M;
    
        while(cin >> N >> M && (N!=0)&&(M!=0))
        {
            int **a = new int* [N+2];
            int ** b = new int* [N+2];
    
            for(int i = 0 ; i < N+2; i++)
            {
                a[i] = new int[M+2];
                b[i] = new int[M+2];
            }
    
            for(int i = 0 ; i <= N+1 ; i++)
            {
                for(int j = 0 ; j <= M+1 ; j++)
                {
                    if(i == 0 || j == 0 ||i == N+1 || j == M+1)
                    {
                        a[i][j] = 0;
                    }
                    else
                    {
                        cin >> a[i][j];
                    }
                }
            }
            for(int i = 0 ; i <= N+1; i++)
                for(int j = 0 ; j <= M+1 ; j++)
                    b[i][j] = 0;
    
            for(int i = 1 ; i <= N; i++)
            {
                for(int j = 1 ; j <= M ; j++)
                {
                    int up = a[i-1][j],down = a[i+1][j],
                        left = a[i][j-1],right = a[i][j+1];
    
                    if(a[i][j] > 0)
                    {
                        int tmp = 0;
                        if(up > 0)
                        {
                            tmp -= abs(up);
                        }
                        else
                        {
                            tmp += abs(up);
                        }
                        if(down > 0)
                        {
                            tmp -= abs(down);
                        }
                        else
                        {
                            tmp += abs(down);
    
                        }
                        if(left > 0)
                        {
                            tmp -= abs(left);
                        }
                        else
                        {
                            tmp += abs(left);
    
                        }
                        if(right > 0)
                        {
                            tmp -= abs(right);
                        }
                        else
                        {
                            tmp += abs(right);
                        }
                        b[i][j]=tmp;
                    }
                    else if(a[i][j] < 0)
                    {
                        int tmp = 0;
                        if(up > 0)
                        {
                            tmp += abs(up);
                        }
                        else
                        {
                            tmp -= abs(up);
                        }
                        if(down > 0)
                        {
                            tmp += abs(down);
                        }
                        else
                        {
                            tmp -= abs(down);
                        }
                        if(left > 0)
                        {
                            tmp += abs(left);
                        }
                        else
                        {
                            tmp -= abs(left);
                        }
                        if(right > 0)
                        {
                            tmp += abs(right);
                        }
                        else
                        {
                            tmp -= abs(right);
                        }
                        b[i][j] = tmp;
                    }
                    else
                        return 1;
                }
            }
    
            int maxcharm = 0;
            int tagi,tagj;
    
            for(int i = 1 ; i <= N ; i++)
            {
                for(int j = 1 ; j <= M ; j++)
                {
                    if(b[i][j] != 0)
                        if(maxcharm < b[i][j])
                        {
                            tagi = i;
                            tagj = j;
                            maxcharm = b[i][j];
                        }
                }
            }
    
            cout << tagi <<" "<< tagj <<" "<<maxcharm<<endl;
    
        }
    
        return 0;
    }
时间: 2024-07-29 11:44:58

vjudge-A-这是测试你会不会语言的模拟的相关文章

编写自动测试c语言程序的shell脚本

目前经常用vim编写一些c语言程序,写好了程序一般都得进行一些测试,当然我们可以进行一些常规的手动测试.心里一想,如果能够用shell脚本编写一个能自动测试c语言程序就好了. 为了试一试这样的想法,找了一个c语言程序题目: [一球从 100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米?第10 次反弹多高? ] 根据这样的要求我编写了一个解决这个问题的程序: #include <stdio.h> #include <stdlib.h> #

测试c语言函数调用性能因素之测试二

函数调用:即调用函数调用被调用函数,调用函数压栈,被调用函数执行,调用函数出栈,调用函数继续执行的一个看似简单的过程,系统底层却做了大量操作. 操作: 1,               调用函数帧指针(函数参数,局部变量,栈帧状态值,函数返回地址)入栈,栈指针自减 2,               保存调用函数的状态数据入寄存器 3,               被调用函数帧指针入栈,执行当前的被调用函数 4,               被调用函数执行结束,退栈,返回到调用函数的帧指针,从寄存

测试c语言函数调用性能因素

函数调用:即调用函数调用被调用函数,调用函数压栈,被调用函数执行,调用函数出栈,调用函数继续执行的一个看似简单的过程,系统底层却做了大量操作. 操作: 1,               调用函数帧指针(函数参数,局部变量,栈帧状态值,函数返回地址)入栈,栈指针自减 2,               保存调用函数的状态数据入寄存器 3,               被调用函数帧指针入栈,执行当前的被调用函数 4,               被调用函数执行结束,退栈,返回到调用函数的帧指针,从寄存

测试c语言函数调用性能因素之测试三

函数调用:即调用函数调用被调用函数,调用函数压栈,被调用函数执行,调用函数出栈,调用函数继续执行的一个看似简单的过程,系统底层却做了大量操作. 操作: 1,               调用函数帧指针(函数参数,局部变量,栈帧状态值,函数返回地址)入栈,栈指针自减 2,               保存调用函数的状态数据入寄存器 3,               被调用函数帧指针入栈,执行当前的被调用函数 4,               被调用函数执行结束,退栈,返回到调用函数的帧指针,从寄存

C语言:模拟实现printf,要求功能:print(&quot;ccc\ts!&quot;,&#39;b&#39;,&#39;i&#39;,&#39;t&#39;,&quot;welcome to you&quot;);

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <stdarg.h> int my_printf(const char *fmt, ...) { const char *s; char c; va_list ap;//参数列表 va_start(ap, fmt);//取的fmt指针给ap while (*fmt) { /*if (*fmt != 's' |

B - 这是测试你会不会排序

2017-07-14 22:44:11 writer:pprp 题目: 他们提出的比赛规则是这样的: 1.  每方派出n个人参赛: 2.  出赛的顺序必须是从弱到强(主要担心中国人擅长的田忌赛马): 3.  每赢一场,得两分,打平得一分,否则得0分. 东洋小苟果然够黑,不过他们万万没有想到,HDU可是卧虎藏龙,不仅有动若脱兔的Linle,还有力大如牛的伪**,更有下沙健美先生HeYing以及因为双手抽筋而练成鹰爪功的月亮公主,估计小苟他们也占不到什么便宜. 假设每个队员的能力用一个整数来表示,你

【C语言】模拟实现atoi函数

atoi(表示 ascii to integer)是把字符串转换成整型数的一个函数. atoi()函数会扫描参数 nptr字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace( )函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转换,并将结果返回.如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回0 我们在模拟实现atoi函数时,要注意以下几点: 1.字符串之前的空白问题 2.正负号 3.字符串为空时 4.

重读《从菜鸟到测试架构师》-- 模拟客户的访问行为(上)

上一章,我们跟着刚刚进入性能测试组的小艾一起初识了什么是性能测试,也知道了客户在性能上都关注了些什么,在组长的教导下,小艾明白了,想要让用户得到最好的性能体验,最简单有效的方法就是模拟客户使用产品时遇到的访问行为,这一章节就来聊聊如何来模拟客户的访问行为呢? 更真实更高效的模拟--自动化的性能测试 如果说功能测试还有手动测试和自动测试的选择,那么,性能测试则不可避免地要用到自动化测试,即通过程序来模拟实际用户对于网站的访问行为.这里大家可以思考下为什么性能测试必须使用自动化来测试~ 既然说到需要

C语言:模拟实现strncmp

模拟实现字符串比较函数strncmp(),与strcmp()函数可以查看博客http://10740184.blog.51cto.com/10730184/1714512有区别. [返回值]若str1与str2的前n个字符相同,则返回0:若arr1大于arr2,则返回大于0的值:若arr1 若小于arr2,则返回小于0的值. [参数]str1, str2 为需要比较的两个字符串,n为要比较的字符的数目(这是函数strcmp()所做不到的).而此处我设置的len是arr1长度., #define