广师oj 2236-孤独数

          广师oj 2236-孤独数 

有2n+1个数,其中有n对数字是成双出现的,有且仅有1个数字只有它自己一个。请你找出这个孤单数。

第一行有且只有一个正整数n(n<=500000)
第二行有2n+1个数ai(-10^9<=ai<=10^9)

有且只有一个数,输出这个孤单数。

3
6 2 6 3 7 7 3

2

利用异或^,偶数个相同的数字异或之后为零,任何非零数与零异或为其本身。

#include  <stdio.h>

int main()
{
    long x,y,z,t,num;
    scanf("%ld",&t);
    num = 0;
    for(x=0;x<t*2+1;x++)
    {
        scanf("%ld",&z);
        num = num^z;
    }
    printf("%ld\n",num);
    return 0;
}

将2n+1个数存起来,用快排把数字排序,再判断相邻的两个数是否相同、

#include <stdio.h>
#include <algorithm>

using namespace std;

int a[1000005];

int main()
{
    int x,y,z,t;
    scanf("%d",&t);
    for(x=0;x<(t*2)+1;x++)
    {
        scanf("%d",&a[x]);
    }
    sort(a,a+(t*2+1));
    a[t*2+1] = a[2*t]-1;
    for(x=0;x<(t*2+1);x+=2)
    {
        if(a[x]!=a[x+1])
        {
            printf("%d\n",a[x]);
            break;
        }
    }
    return 0;
}
### XTU OJ 1402 平方及其倍题目解析 #### 题目描述 XTU OJ平台上的问题1402涉及处理平方及其倍。具体来说,该问题可能要求识别并操作特定范围内的平方及其整倍。 #### 解题思路 对于此类问题,可以采用筛选方法来预先计算出一定范围内所有的平方,并标记其倍。通过这种方法可以在后续查询时快速响应。一种常见的做法是利用组作为标志位记录哪些值已经被确认为某个平方的倍[^1]。 给定代码片段展示了如何使用布尔型组`b[]`初始化所有位置为真值(表示可能是目标),随后遍历这些索引并将符合条件的位置设为已访问状态。这里需要注意的是,此段程序逻辑存在错误,因为直接设置`b[2*i+1]=b[3*i+1]=1`并不能正确反映平方特性;正确的算法应该基于实际平方根进行迭代更新相应倍的状态。 #### 代码实现 下面是一个修正后的C++版本解决方案: ```cpp #include <iostream> using namespace std; const int MAX = 1e6; bool isSquareMultiple[MAX]; int main(){ fill(isSquareMultiple, isSquareMultiple + MAX, false); for(long long i=2; i*i<MAX; ++i){ if(!isSquareMultiple[i]){ for(long long j=i*i; j<MAX; j+=i*i){ isSquareMultiple[j] = true; } } } // 假设输入n代表要查询的最大界限 int n; cin >> n; for(int k=1; k*k<=n; ++k){ cout << "The square of " << k << ": "; for(int m=k*k; m<=n; m+=(k*k)){ cout << m << ' '; } cout << '\n'; } } ``` 上述代码实现了对不超过指定上限内所有自然是否属于任何正整平方之倍性质进行了预处理,并能够按照需求输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值