Given an array of n integers and q queries. Write a program to print floor value of mean in range l to r for each query in a new line.

Examples:
Input : arr[] = {1, 2, 3, 4, 5}
        q = 3
        0 2
        1 3
        0 4
Output : 2
         3
         3
Here for 0 to 2 (1 + 2 + 3) / 3 = 2

Input : arr[] = {6, 7, 8, 10}
        q = 2
        0 3
        1 2
Output : 7
         7

Input:

The first line consists of an integer T i.e number of test cases.

The first line of each test case consists of two integer n and q.

The next line consists of n spaced integers. The next line consists of 2*k spaced integers each pair representing the range.

Output:
Print the mean(floor value) in given range for each query in new line.

Constraints: 
1<=T<=100
1<=q<n<=1000
1<=a[i]<=1000

Example:
Input:
1
5 3
1 2 3 4 5
0 2 1 3 0 4

Output:
2 3 3

下面是我的代码实现:

#include <stdio.h>

int main() {
    int num,i;//测试用例
    scanf("%d\n",&num);

    for(i=0;i<num;i++)
    {
        int N,M,j;

        scanf("%d",&N);
        scanf("%d",&M);
        int *Arr=(int *)malloc(sizeof(int)*N);
        int *Brr=(int *)malloc(sizeof(int)*2*M);
        for(j=0;j<N;j++)//依次输入数组元素
            scanf("%d",&Arr[j]);

        for(j=0;j<2*M;j++)//依次输入"测试对"的值
            scanf("%d",&Brr[j]);

        for(j=0;j<M;j++)//循环求解平均值
        {
          int avg=0,sum=0,k;
          for(k=Brr[2*j];k<=Brr[2*j+1];k++)
          {
              sum=sum+Arr[k];//求和
          }
          avg=sum/(Brr[2*j+1]-Brr[2*j]+1);//平均值=和/元素个数。
          printf("%d ",avg);
        }
    }
    return 0;
}

 然后提交的时候,出现的问题是:

Wrong Answer. !!!Wrong Answer
Possibly your code doesn't work correctly for multiple test-cases (TCs).
The first test case where your code failed:

Input:
42 30
335 501 170 725 479 359 963 465 706 146 282 828 962 492 996 943 828 437 392 605 903 154 293 383 422 717 719 896 448 727 772 539 870 913 668 300 36 895 704 812 323 334
2 33 21 25 22 29 8 11 28 39 3 7 29 39 19 22 10 11 14 36 34 36 10 38 10 28 20 33 9 14 10 20 12 21 20 33 15 23 4 18 24 38 10 26 16 29 15 18 14 25 34 35 24 32 35 39 3 35 6 19

Its Correct output is:
610 393 575 490 640 598 657 488 555 607 334 624 615 625 617 697 671 625 548 618 641 609 566 650 589 484 678 549 616 646

And Your Code's output is:
610 393 575 490 640 598 657 488 555 607 334 624 615 625 617 697 671 625 548 618 641 609 566 650 589 484 678 549 616 646 434 499 485 480 447 559 426 455 482 494 501 511 4...

  截图如下:

这是为什么我的代码会多输出这么多数据呢?我很不理解。。。。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++问题已经解决++++++分割线+++++问题已经解决++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

现在已经理解了我之前的错误。

这个程序,在Code Blocks里面的输出是正常的,截图如下:

正确的输出是因为我在输入案例中只输入了一个,程序员自己可以控制格式。

但是为什么在geeksforgeeks就会出错呢?

是因为当它评判的时候,是将输出放在一个文件里面,然后通过对比我的程序的输出文件和它正确的文件,如果一致就通过,如果不一致,就是wrong answer!!!。并且它的评判应该是多个测试用例,每一个测试用例是通过换行进行分割的。我的程序中没有在每一个测试用例结束时候通过换行进行分割。,所以,增加了每一个测试用例结束时候的换行,就解决了这个问题。

这个题目我稍微理解了一些OJ的评判方法。多加练习才是。

现在的代码更新如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num,i;//测试用例
    scanf("%d\n",&num);

    for(i=0;i<num;i++)
    {
        int N,M,j;

        scanf("%d",&N);
        scanf("%d",&M);
        int *Arr=(int *)malloc(sizeof(int)*N);
        int *Brr=(int *)malloc(sizeof(int)*2*M);
        for(j=0;j<N;j++)//依次输入数组元素
            scanf("%d",&Arr[j]);

        for(j=0;j<2*M;j++)//依次输入"测试对"的值
            scanf("%d",&Brr[j]);

        for(j=0;j<M;j++)//循环求解平均值
        {
          int avg=0,sum=0,k;
          for(k=Brr[2*j];k<=Brr[2*j+1];k++)
          {
              sum=sum+Arr[k];//求和
          }
          avg=sum/(Brr[2*j+1]-Brr[2*j]+1);//平均值=和/元素个数。
          printf("%d ",avg);
        }
        printf("\n");
    }
    return 0;
}

  还有一种更简单的方案,如下:就是使用变量进行计算和,然后求平均值。相比之前的程序,节省了存储空间。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num,i;
    scanf("%d",&num);
    for(i=0;i<num;i++)
    {
        int N,M,j;//N是数组元素个数,M是测试对。j循环变量
        scanf("%d",&N);
        scanf("%d",&M);
        int *Arr=(int *)malloc(sizeof(int)*N);
        for(j=0;j<N;j++)
            scanf("%d",&Arr[j]);
        int left, right,k;//left和right是范围变量,k是循环变量,sum是当前和。
        int *result=(int *)malloc(sizeof(int)*M);//存放结果。
        for(j=0;j<M;j++)
        {
            scanf("%d",&left);
            scanf("%d",&right);
            int sum=0;
            for(k=left;k<=right;k++)
            {
                sum=sum+Arr[k];
            }
            result[j]=sum/(right-left+1);
        }
        for(j=0;j<M;j++)
            printf("%d ",result[j]);
    }
    return 0;
}

  如有疑问,请留言。

[Mean of range in array]的更多相关文章

  1. 【VBA】利用Range声明Array(一维/二维)

    [说明] B2开始到B?(中间不能有空格),定义一维数组Arr_approver() Dim R_sh As Worksheet Set R_sh = ThisWorkbook.Sheets(&quo ...

  2. 转 python range 用法

    详细记录python的range()函数用法   使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的 ...

  3. 详细记录python的range()函数用法

    使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的slide,最后分析一个好玩儿的冒泡程序. 这里记 ...

  4. range,shuffle,str_shuffle

    print_r(range(1,20)); 输出,range产生 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ...

  5. iOS 判断数组array中是否包含元素a,取出a在array中的下标+数组方法详解

    目前找到来4个解决办法,第三个尤为简单方便 NSArray * arr = @["]; //是否包含 "]) { NSInteger index = [arr indexOfObj ...

  6. python 内置函数range和xrange

    range range 是一种类型(type),它是一个数字的序列,而且是不可变的,通常用在for循环中. class range(stop)class range(start, stop [, st ...

  7. python中的range与xrange

    range 也是一种类型(type),它是一个数字的序列(s sequence of numbers),而且是不可变的,通常用在for循环中. class range(stop) class rang ...

  8. (转)python的range()函数用法

    使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的slide,最后分析一个好玩儿的冒泡程序. 转自: ...

  9. range() 函数详解 python

    使用python的人都知道range()函数很方便,今天再用到他的时候发现了很多以前看到过但是忘记的细节.这里记录一下range(),复习下list的slide,最后分析一个好玩儿的冒泡程序. 这里记 ...

随机推荐

  1. 条件随机场 Conditional Random Fields

    简介 假设你有冠西哥一天生活中的照片(这些照片是按时间排好序的),然后你很无聊的想给每张照片打标签(Tag),比如这张是冠西哥在吃饭,那张是冠西哥在睡觉,那么你该怎么做呢? 一种方法是不管这些照片的序 ...

  2. jQuery与别的js框架冲突

    jQuery.noConflict()运行这个函数将变量$的控制权让渡给第一个实现它的那个库. 这有助于确保jQuery不会与其他库的$对象发生冲突. <script type="te ...

  3. Struts1.2,struts2.0原理分析

    struts1原理: 1.首先我们表单提交到action 2.进入到web.xml 3.web.xml拦截*.do 4.交给ActionServlet 5.找到path属性,获得url 6.找到nam ...

  4. python并发编程之多线程一

    一,什么是线程 线程也被称为轻量进程计算机科学术语,指运行中的程序的调度单位. 线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程.线程不拥有系统资源,只有运行必须的一些数据结构: ...

  5. Nginx负载均衡的优缺点

    Nginx的优点是: 1.工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名.目录结构,它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx ...

  6. linux配置分步安装lnmp环境----ghj

    前台:nignx 后台:apache[linux命令]用户文件目录启动定时任务:[开启RZ命令]yum -y install lrzsz [防火墙]防火墙配置文件: /etc/sysconfig/ip ...

  7. 如何编写一个稳定的网络程序(TCP)

    本节我们看一下怎样才能编写一个基于TCP稳定的客户端或者服务器程序,主要以试验抓包的方式观察数据包的变化,对网络中出现的多种情况进行分析,分析网络程序中常用的技术及它们出现的原因,在之后的编程中能早一 ...

  8. N卡全部历史驱动

    记录一下寻找驱动方法 打开链接 http://www.geforce.cn/drivers/beta-legacy 默认搜索出来是10个,之后打开控制台输入如下内容回车显示全部(100,可以修改数字来 ...

  9. 关于sqlmap使用手册

    sqlmap 使用手册 官方wiki Github sqlmap也是渗透中常用的一个注入工具,可以用来检测sql注入漏洞. 功能与作用 完全支持MySQL,Oracle,PostgreSQL,Micr ...

  10. vue-cli 安装失败Failed to download repo vuejs-templates/webapck-simple: Response code 404 (Not Found)

    新学习vue的萌新们经常会遇到各种各样的坑.例如上面这个报错.这个一般是命令行面板写错单词导致. 正确:vue init webpack-simple .(注意"."点,指当前目录 ...