原博客地址:http://blog.chinaunix.net/uid-22566367-id-382018.html,謝謝博主!
感覺博主寫的有點繁瑣,特別是尋找兩個不爲0的值的時候。
解題的思路是:在數組中先找到兩個不爲0的數,第三個數就是需要刪除的,賦值爲0表示刪除掉,再尋找下個不爲0的刪除,
#include <stdio.h>
#include <stdlib.h>#define MAXSIZE 1000
/*
問題描述:有一個整型數組a,共有1000個元素,即int a[1000]={1, 2, 3, 4...1000},
現在請設計一個算法,將每隔兩個的數組元素刪除,求最後的剩餘一個元素的下標和值。
如果到結尾的話,從頭開始,循環刪除。
例如有十個數據時:
a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
刪除的順序是3, 6, 9, 2, 7, 1, 8, 5, 10
剩餘的一個元素是4,它的下標是3.
*/
void del_print();
void del_print(int * a,int size)
{
int i=0,j=0,count=0,x=0,k;
for(j=0;j<size;j++)
{
while(a[i % size]==0) i++;
while(a[i % size]!=0)
{
i++;
while(a[i % size]==0) i++;
if((++x)==2) break;
}
printf("a[%d]=%d \n",i % size,a[i % size]);
if(i>=size) i%=size;
if(j==size-1) break;
a[i++] = 0;
x=0;
/*
printf(" 當前的數組:\n");
for(k=0;k<size;k++){
printf("%3d",a[k]);
}
printf("\n");
*/
}
printf("最後一個a[%d]=%d\n",i,a[i]);
}
int main()
{
int i=0,a[MAXSIZE];
for(;i<MAXSIZE;i++)
{
a[i] = i+1;
}
del_print(a,MAXSIZE);
printf("Hello world!\n");
return 0;
}