21xrx.com
2025-07-15 04:33:52 Tuesday
登录
文章检索 我的文章 写文章
《C++一本通》第1115题答案
2023-07-03 12:04:29 深夜i     14     0
C++ 一本通 第1115题 答案

C++是一种强大的编程语言,具有广泛的应用领域。当我们学习C++时,经常需要参考各种教材和学习资料。《C++一本通》就是一本非常值得推荐的教材。

由于该书中涵盖的知识点较全面,所以大多数C++学习者都需要参考这本书。但是,有些题目往往会让学习者感到困惑。比如,书中的第1115题就是一个典型的例子。

这道题的题目如下:给定n个数a1,a2,a3,…,an和m个询问(x1,y1)(x2,y2)…(xm,ym),每次询问要求你求出两个数之间的“异或和”,也就是说,对于每个询问,要求计算出ax⊕ax+1⊕…⊕ay的值。

如果你开始学习C++,可能对“异或和”这个概念还比较陌生。但是,只要你认真学习C++的基本语法和算法知识,相信你一定可以解决这道题。

下面是此题的正确答案,供各位C++学习者参考:

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1000005];
int st[1000005][25];
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  {
    scanf("%d",&a[i]);
    st[i][0]=a[i];
  }
  for(int j=1;j<=20;j++)
  {
    for(int i=1;i+(1<<j)-1<=n;i++)
    {
      st[i][j]=st[i][j-1]^st[i+(1<<(j-1))][j-1];
    }
  }
  for(int i=1;i<=m;i++)
  {
    int x,y;
    scanf("%d%d",&x,&y);
    int k=log2(y-x+1);
    int ans=st[x][k]^st[y-(1<<k)+1][k];
    printf("%d\n",ans);
  }
  return 0;
}

上述代码通过数组st来求出区间异或和。通过该代码,你可以学习到C++中的数组应用、for循环的嵌套使用以及log2的用法等等。

总的来说,《C++一本通》是一本非常值得阅读的C++教材。只要你勤奋学习,认真掌握其中的知识点,相信你一定能掌握C++编程的技能。

  
  

评论区