zoukankan      html  css  js  c++  java
  • 2019年1月20日训练日记

    对于昨天的位运算,解决了今天的一个题:
    一个奇数次:
    输入一个长度为n的数组,考虑所有不同的数字,有且只有一个数字出现了奇数次。比如对于1 2 3 1 2 3 1,我们考虑所有不同的数字1 2 3,有且只有1出现了奇数次(3次)输出这个出现了奇数次的数字。1 <= n <= 100000 1 <= a[i] <= 10^9
    (用异或运算解决,将所有输入的数据异或(可以通过对零异或保留初值)这样就得到唯一一个出现奇数次的数据了)
    但是对于两个奇数次或多个奇数次用异或我就无从下手了。。。
    于是换了另一种做法,代码如下:

    #include <cmath>
    #include <cstdio>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    long long int a[100001];
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
                if(a[i]==a[j]&&i!=j)
                {
                    a[i]=0;
                    a[j]=0;
                }
        }
        sort(a+1,a+n);
        cout<<a[n-1]<<" "<<a[n];
    	return 0;
    }
    
    

    但是对于下列测试数据得不到结论,大概是越界了,于是定义数组时换成了long long int,但是还是不能测出,其一组测试数据如下:
    10
    470151588
    233455503
    826112663
    223502930
    233455503
    271743491
    826112663
    470151588
    470131517
    271743491
    通过这组数据发现测试数据时还真是相当暴力,都这么大。这个题还要再想想才行。
    看到底是越界问题还是代码问题。

    另外还从别的csdn上看到一些有关生成随机数的概念,写的比较详细,现在写到下面:生成随机数
    (1)随机函数rand()是在头文件cstdlib中
    (2)利用求余函数rand()%b将函数rand()生成的随机数变化到[0,b-1]之间
    (3)利用rand()%b+a将随机数的取值范围平移到[a,a+b-1]之间
    例:#include
    int magic;
    magic=rand()%100+1; //生成一个1-100之间的随机数,但这种方法只能生成固定的随机数,于是我们提出了随机数种子
    例:#include<time.h>
    #include
    int magic;
    srand(time(NULL)); //为函数rand()设置随机数种子
    magic=rand()%100+1;

  • 相关阅读:
    [转]面向对象的三个基本特征
    C#验证Email
    天气预报
    【原】c#实现数字金额转换成大写金额
    C#发送Email
    DIV 显示最上层
    ArrayList 与 String[] 之间的转换
    Flex与.NET互操作(五):FileReference+HttpHandler实现上传/下载
    Flex与.NET互操作(三):基于WebService的数据访问(下)
    Flex与.NET互操作(六):Flex和.NET协同开发利器FluorineFx
  • 原文地址:https://www.cnblogs.com/study-hard-forever/p/12130082.html
Copyright © 2011-2022 走看看