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;

  • 相关阅读:
    学习笔记 MYSQL报错注入(count()、rand()、group by)
    学习笔记 HTTP参数污染注入
    学习笔记 MSSQL显错手工注入
    代码审计入门后审计技巧
    字符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
  • 原文地址:https://www.cnblogs.com/study-hard-forever/p/12130082.html
Copyright © 2011-2022 走看看