gpt4 book ai didi

c++ - 数组中基于查询的移位元素

转载 作者:太空狗 更新时间:2023-10-29 23:13:28 29 4
gpt4 key购买 nike

我们有两个数字 n 和 m。 n 表示数组中元素的个数,m 表示查询的个数。给定 m 个查询。我们需要对数组执行两种类型的查询。查询可以有两种类型,类型 1 和类型 2。

TYPE 1 查询表示为 (1 i j ):通过删除 i 到 j 位置之间的元素并将它们添加到前面来修改给定数组。

TYPE 2 查询表示为 (2 i j ):通过删除 i 到 j 位置之间的元素并将它们添加到后面来修改给定数组。

我们的任务是在执行查询之后简单地打印差值 array[1]-array[n],然后打印数组。

输入格式:
第一行由两个空格分隔的整数组成,n 和 m。第二行包含 n 个整数,代表数组的元素。m 查询如下。每行包含形式为 (type i j) 的类型 1 或类型 2 的查询。

输出格式:
在第一行打印绝对值 a[0]-a[n]。在第二行打印结果数组的元素。每个元素应由一个空格分隔。

例子:
给定的数组是 [1,2,3,4,5,6,7,8]。
执行query(1 2 4)后,数组变为(2,3,4,1,5,6,7,8)。
执行query(2 3 5)后,数组变为(2,3,6,7,8,4,1,5)。
执行query(1 4 7)后,数组变为(7,8,4,1,2,3,6,5)。
执行query(2 1 4)后,数组变为(2,3,6,5,7,8,4,1)。

针对这个问题,我写了一个程序如下:

int main() 
{
int n,m;
cin>>n;
cin>>m;
int arr[n];
for(int i=0;i<n;i++)
{
cin>>arr[i];
}

int count; // counter to control no of queries to accept
for(count=0;count<m;count++)
{
int type,start,end; // 3 parts of query
cin>>type;cin>>start;cin>>end;

if(type==1)
{
//calculated difference between (start,end) to find no of iterations

for(int i=0;i<=(start-end);i++)
{ // t is temporary variable
int t=arr[(start-1)+i]; //(start-1) as index starts from 0
arr[(start-1)+i]=arr[i];
arr[i]=t;
}
}
else
{
for(int i=0;i<=(start-end);i++)
{
int t=arr[(start-1)+i];
// elements inserted from end so we subtract (n)-(start-end)
arr[(start-1)+i]=arr[(n-1)-(start-end)+i];
arr[(n-1)-(start-end)+i]=t;
}
}
count++;
//increment count
}

int absolute=abs(arr[0]-arr[n-1]);
cout<<absolute<<"\n";

for(int i=0;i<n;i++)
{
cout<<arr[i]<<" "<<endl;
}

return 0;
}

我期待代码能正常工作,但令人惊讶的是甚至没有正确显示输出。这是测试用例:
输入:
8 4
1 2 3 4 5 6 7 8
1 2 4
2 3 5
1 4 7
2 1 4

预期输出:
1
2 3 6 5 7 8 4 1

我的输出:
7
1
2
3
4
5
6
7
8

我试运行了很多次代码,但似乎无法理解问题出在哪里。请查看代码并提供建议。

最佳答案

for循环条件错误。


正确方法:for ( int i = 0; i<=(end - start ) ; i++)

关于c++ - 数组中基于查询的移位元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39041915/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com