zoukankan      html  css  js  c++  java
  • NYOJ 题目528 找球号(三)

    找球号(三)

    时间限制: 2000 ms  |  内存限制: 3000 KB
    难度: 2
     
    描述

    xiaod现在正在某个球场负责网球的管理工作。为了方便管理,他把每个球都编了号,且每个编号的球的总个数都是偶数。有一天,xiaod发现少了一个球,你能帮他找出丢的那个球的球号吗?

     
    输入
    有多组测试数据。每组数据包括两行。
    第一行是一个整数N(0<N<1000000),表示现在所剩的球数。
    随后的一行是N个数,表示所剩的各个球的编号M(0<M<10^9)。
    输出
    对于每组数据,输出弄丢的那个球的球号。
    样例输入
    5
    1 1 3 6 6
    3
    1 2 1

    样例输出

     

    3
    2
          一开始没有注意内存限制,直接开了一个数组,用数组下标记录球号,最后查询时用a[i]对2取余,余数为1时,输出 i 即可。提交以后才发现超内存了。

    超内存的代码:

     

    #include<stdio.h>
    #include<string.h>
    int a[1000002];
    int main()
    {
    	int n,i,m,max;
    	while(~scanf("%d",&n))
    	{
    		memset(a,0,sizeof(a));
    		max=0;
    		for(i=0;i<n;i++)
    		{
    			scanf("%d",&m);
    			a[m]++;
    			if(m>max)
    				max=m;
    		}
    		for(i=1;i<=max;i++)
    		  if(a[i]&1)
    		  {
    			  printf("%d\n",i);
    			  break;
    		  }
    	}
    	return 0;
    }        

    后来听人说可以用异或的性质来处理,就查了一下异或的性质,写好代码提交上就AC了。

    异或的运算规则: 0^0=0, 0^1=1,1^0=1,1^1=0

    具体就是先将十进制数转化为二进制数(取8位或16位,不足补0),然后每一位对应异或运算,把结果转化为十进制数就是异或后的结果。如9^5=12;

    00001001  (9的二进制表示)

    00000101   (5的二进制表示)

    00001100   (异或后的结果,用十进制表示就是12)

    具体代码如下:

     

    #include<stdio.h>
    int main()
    {
    	int n,m,i,s;
    	while(~scanf("%d",&n))
    	{
    		s=0;
    		for(i=0;i<n;i++)
    		{
    			scanf("%d",&m);
    			s^=m;
    		}
    		printf("%d\n",s);
    	}
    	return 0;
    }

    另一种方法就是用C++里的容器处理,我看别人这样写的,做个参考。具体代码如下:

     

    #include<stdio.h>
    #include<set>
    using namespace std;
    int main()
    {
        int n,a,b,i;
        set<int> T; //定义一个int型容器
        while(scanf("%d",&n)!=EOF)
        {
            b=0;
            for(i=0;i<n;i++)
            {
                scanf("%d",&a);
                if(T.find(a)==T.end())  
    		T.insert(a);//容器中无与a相同的,插入a
                else                    
    		T.erase(a); //找到与a相同的,删除所有的a
            }
            printf("%d\n",*T.begin());
            T.clear();//清空容器
        }
    	return 0;
    }        





  • 相关阅读:
    修复 XE8 for Android 方向传感器 headingX,Y,Z 不会动的问题
    修复 XE8 for Android 分享图片到 Gmail 权限不足的问题
    Firemonkey 载入 Style 皮肤 (*.fsf 二进制文件) 速度测试
    调整 FMX Android 文字显示「锯齿」效果
    [原创工具] ListView 调色盘 (Free)
    有关Linux的可执行程序
    Android 下配置一个 /dev/fb0 节点出来
    Android下运行Linux可执行程序
    数据库的范式
    rk3128 适配 USB 摄像头
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3087324.html
Copyright © 2011-2022 走看看