geeksforgeeks-Array-Rotate and delete

本文介绍了一个关于数组操作的问题,具体涉及数组的旋转与删除操作,并通过实例详细解释了问题解决的过程。最后提供了C++与Python两种语言的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

As usual Babul is again back with his problem and now with numbers. He thought of an array of numbers in which he does two types of operation that is rotation and deletion. His process of doing these 2 operations are that he first rotates the array in a clockwise direction then delete the last element. In short he rotates the array nth times and then deletes the nth last element. If the nth last element does not exists then he deletes the first element present in the array. So your task is to find out which is the last element that he deletes from the array so that the array becomes empty after removing it.

For example
A = {1,2,3,4,5,6}.

He rotates the array clockwise i.e. after rotation the array A = {6,1,2,3,4,5} and delete the last element that is {5} so A = {6,1,2,3,4}. Again he rotates the array for the second time and deletes the second last element that is {2} so A = {4,6,1,3}, doing these steps when he reaches 4th time, 4th last element does not exists so he deletes 1st element ie {1} so A={3,6}. So continuing this procedure the last element in A is {3}, so o/p will be 3.

Input:
The first line of input contains an integer T denoting the no of test cases. Then T test cases follow. Each test case contains two lines. The first line of each test case contains an integer N. Then in the next line are N space separated values of the array A.

Output:
For each test case in a new line print the required result.

Constraints:
1<=T<=200
1<=N<=100
1<=A[i]<=10^7

Example:
Input
2
4
1 2 3 4
6
1 2 3 4 5 6

Output:
2
3

C++(gcc5.4)代码:

    #include <iostream>
    using namespace std;

    int main() {
        //code
        // define the number of test cases
        int T;
        cin>>T;
        
        for(int t=0; t<T; t++)
        {
            //get the two line input
            int N;
            cin>>N;
            int a[N];
            int i = 0;  
            for(i=0;i<N;i++)
                cin>>a[i];
    
            //Rotate and delete
            int index_delete = 1;
            int array_length = N;
            int tmp;
            while(array_length>1)  
            {
                //Rotate
                tmp = a[array_length - 1];
                for(int j=array_length-1; j>0; j--)
                {
                    a[j] = a[j-1];
                }
                a[0] = tmp;
                
                //delete
                for(int k=array_length<index_delete?0:array_length-index_delete; k<array_length-1; k++)
                {
                    a[k]=a[k+1];
                }    
                
                index_delete += 1;
                array_length -= 1; 
            }
            cout<<a[0]<<endl;
        }
        return 0;
    }
注:更加严谨的将一行数字存入数组的代码如下,但是在测试时包含这部分代码的程序会提示超出时间限制!

·#include
using namespace std;
int main()
{
int a[50];
int i = 0;
char c;
while((c=getchar())!='\n')
{
if(c!=' ')//把这句判断条件改动
{
ungetc(c,stdin);
cin>>a[i++];
}
}
for(int j=0;j<i;j++)
{
cout<<"a["<<j<<"]:"<<a[j]<<endl;
}

---

include

using namespace std;

int main()
{
int a[20];
int i = 0;
char c;
cin>>a[i++];
while((c=getchar())!='\n')
{
cin>>a[i++];
}
for(int j=0;j<i;j++)
{
cout<<"a["<<j<<"]:"<<a[j]<<endl;
}
}

python代码

转载于:https://www.cnblogs.com/alanma/p/7360215.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值