21xrx.com
2024-11-22 06:57:58 Friday
登录
文章检索 我的文章 写文章
《C++一本通》第1115题答案
2023-07-03 12:04:29 深夜i     --     --
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++编程的技能。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复