11.24 作业 Problem C: 平均数在哪儿?

来源:互联网 发布:郑州学历网络教育 编辑:程序博客网 时间:2024/06/07 13:23

Description

给你一个正整数序列a1, a2, ..., an.,找出所有的i, 满足第i个数是其他所有数的平均数。

Input

第一行是一个正整数T,表示测试用例个数。每个测试用例的第一行是一个正整数n(2 ≤ n ≤ 2·105)。第二行是n个正整数a1, a2, ..., an (1 ≤ ai≤ 1000)。

Output

对于每组测试用例,第一行输出满足条件的数的个数,第二行输出所有满足条件的数的编号(两编号之间用一个空格隔开),编号为从1到n的正整数。

如果不存在满足条件的数,输出一个0,不用输出第二行。

Sample Input

341 309 455 12751 2 3 4 5450 50 50 50

Sample Output

01341 2 3 4

思路:
用两个数组
一个数组将输入的数储存起来用于循环比较大小
另一个数组将下标储存用于输出下标
注:注意将和转化为double型 不然可能会出现4/3=4/4的情况。导致题目WA。
代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){    int a[200001];    int b[200001];    int T;    scanf("%d",&T);    int n;    int i,j,k;    int sum;    int flag;    while(T--)    {        memset(a,0,sizeof(a));        memset(b,0,sizeof(b));        sum=0;        scanf("%d",&n);        for(i=0; i<n; i++)        {            scanf("%d",&a[i]);            sum += a[i];        }        j=0;        flag=0;        for(i=0; i<n; i++)        {            if(((double)sum-a[i])/(n-1)==a[i])//double很关键            {                b[j]=i+1;//储存下标 即第n个数                flag++;                j++;            }        }        if(flag==0)            printf("0\n");        else        {            printf("%d\n",flag);            for(k=0; k<flag; k++)//注意输出格式                if(k==0)                    printf("%d",b[k]);                else                    printf(" %d",b[k]);            printf("\n");        }    }    return 0;}


0 0
原创粉丝点击