FJUT ACM 1868 数组标记法

找出单身狗

TimeLimit:1000MS  MemoryLimit:128MB
64-bit integer IO format:%lld
Problem Description
情人节的时候,情侣们在一起开了个party,可是这个party混进了一个单身狗,于是大家决定找出这个单身狗,
已知,到场的每个人身上都有一个标号,这个标号是一个正整数,每个人的标号不是唯一的,但是情侣拥有的
标号是一样的,给你所有人无序的标号,请你找出那只单身狗的标号。
第一题的大致格式:
#include < stdio.h >
int main()
{
    int N,i;
    while(scanf("%d",&N)!=EOF){
        for(i=0;i < N;i++){输入N个数
            scanf(输入第i个数字);
        }
        ....
        printf(答案);
    }
    return 0;
}

Input
第一行为一个奇数N(2 < n < 202),表示到场的人数;
第二行有N个整数(0 < N < = 100)第i个数表示第i个人的标号。
Output
对于每组测试案例,每一行输出该单身狗的标号。
SampleInput
3
1 1 3
5
1 1 1 1 1
5
1 2 1 2 3

SampleOutput
3
1
3

 这题可以使用数组标记法,来ac

什么是数组标记法呢?数组标记法,就是使用数组的特性去标记,

 

比如上题,就是要求找到单身狗,我们可以把数组的值初始化为0,然后把a【i】++;

最后再用一个for循环去判断输出!

举个例子

1 1 2 2 3

对应的过程就是

a[1]++;

a[1]++;

a[2]++;

a[2]++;

a[3]++;

对应的值就为

a[1]=2;

a[2]=2;

a[3]=1;

那我们写个for循环的

如果a[i]%2==0那么不输出

否则就输出

printf("%d",i);

简单的来讲,就是用i的值来标记,用a[i]的值来统计出现次数,

充分使用了,数组的前标的特点!

附上代码:

#include<stdio.h>
#include<string.h>
int x[101];
int main()
{
    int n,i,y,z;
    while(scanf("%d",&n)!=EOF)
    {memset(x,0,sizeof(x));
    z=0;
        for(i=0;i<n;i++)
        {
            scanf("%d",&y);
            x[y]++;
        }
        for(i=0;i<101;i++)
        {
            if(x[i]!=0&&x[i]%2!=0)printf("%d\n",i);
        }
    }
    return 0;
}

 

 

posted @ 2018-01-11 13:21  moxin0509  阅读(302)  评论(0编辑  收藏  举报