数组

时间:2016-08-19 14:45:38

标签: c++ arrays algorithm

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

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

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

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

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

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

例:
给定数组是[1,2,3,4,5,6,7,8] 执行查询(1 2 4)后,数组变为(2,3,4,1,5,6,7,8) 执行查询(2 3 5)后,数组变为(2,3,6,7,8,4,1,5) 执行查询(1 4 7)后,数组变为(7,8,4,1,2,3,6,5) 执行查询(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;
}

我希望代码能够正常工作,但很可能甚至没有正确显示输出。这是测试用例:
INPUT:
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

我已经多次运行代码,但似乎无法理解问题的来源。请查看代码并向我提供建议。

1 个答案:

答案 0 :(得分:0)

for循环条件错误。

正确的方式:for(int i = 0; i&lt; =(end - start); i ++)