一道刪除數的編程題

原博客地址: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;

}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章