一道删除数的编程题

来源:互联网 发布:手机上可以编程的软件 编辑:程序博客网 时间:2024/06/06 11:02

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

}





0 0
原创粉丝点击