• 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
    ",i);
            }
        }
        return 0;
    }
  • 相关阅读:
    读《大道至简—编程的精义》有感
    c++ 指针做为参数和返回值
    c++ 函数
    c++ 分配与释放内存
    c++ 以多维数组的形式访问动态内存
    c++ 动态数组,指针与动态内存分配
    c++ 指针访问数组
    c++ 常量指针
    c++ 指针
    c++ 字符串转换
  • 原文地址:https://www.cnblogs.com/qq136155330/p/8267899.html
Copyright © 2020-2023  润新知