有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
链接:https://www.nowcoder.com/questionTerminal/f9533a71aada4f35867008be22be5b6e
题目来源:牛客网
只用原数组删除数据,无需增加额外空间开销
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 10
int main()
{
std::cout<<"aaaaaaaa"<<endl;
int arr[LENGTH];
for(int i=0;i<LENGTH;i++)
{
arr[i]=i;
}
int j=0;
int cout =1;
int length = sizeof(arr)/sizeof(arr[0]);
while(length>1)
{
for(int i=0;i<length;i++)
{
if((cout)%3 != 0)
{
arr[j++]=arr[i];
}
cout++;
}
length=j;
j=0;
}
std::cout << arr[0];
}