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

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;
}


猜你喜欢

转载自blog.csdn.net/zhengyuan233/article/details/53323478