厨师和娃娃MISSP

时间:2018-08-31 15:48:39

标签: c

这是codechef问题的link-厨师和娃娃

为什么我的代码总是输出错误的答案?输出应该是没有匹配的数字,但是我的代码总是打印第一个元素。没有正确的条件,条件应该是什么?

问题陈述

厨师是成对的粉丝,他喜欢成对出现的所有事物。他甚至有一个洋娃娃收藏品,其中所有洋娃娃都配对过。一天,在浏览他的收藏品时,他发现洋娃娃数量奇多。有人偷了一个洋娃娃!!!

帮助厨师找到缺少的洋娃娃类型。

输入 第一行包含测试用例的数量。 输入的第二行包含数组中元素的数量。 接下来的n行是剩下的每个娃娃的类型。

输出 查找没有配对的娃娃的类型

示例 输入:

1

3

1

2

1

输出: 2

#include <stdio.h>
int main(){
    int t, N, i, m, k, z, flag=0;
    scanf("%d", &t);
    while(t--)
    {   
        scanf("%d",&N);
        int arr[N];
        for(i=0;i<N;i++){
            scanf("%d", &arr[i]);
        }
        int j;
        for(j=0;j<N;j++){
            m=arr[j];
            for(k=0;k<N;k++){
                if(m==arr[k] && k!=j)
                {
                    flag=0;
                }
                else
                {
                    flag=1;
                    break;
                }
                printf("%d", m);
            }
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您每次[Container prompt] ls -l /content/datalab 都会跳出循环。您必须检查每个数组成员是否存在于数组的其他位置。

k==j

但是要小心,因为这仅在数组成员中有重复项时才会出现。您可能要检查数组中是否有偶数个元素。

如果要检查哪些数组成员出现奇数次

#include <stdio.h>

int main()
{
    int t, N, i, j, k, m, z, flag;

    scanf("%d", &t);

    while(t--)
    {   
        scanf("%d",&N);
        int arr[N];

        for(i=0;i<N;i++)
        {
                scanf("%d", &arr[i]);
        }

        for(j=0;j<N;j++)
        {
            m=arr[j];
            flag=1;
            for(k=0;k<N;k++)
            {
                if(m==arr[k] && k!=j)
                {
                    flag=0;
                }
            }

            if(flag)
            {
                printf("%d\n", m);
            }
        }
    }
    return 0;
}