ACM——队

2018-02-04  本文已影响0人  香儿1025

知识点:

(原理)

队列 是一种先进先出的线性表。其限制仅在表的一端(尾端)进行插入,另一端(首端)进行删除的线性表,先进先出FIFO。

(例题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1276

题目分析:第一步用数组A存下所有的数 判断A数组的长度是否大于三如果大于三则循环

第二步用数组B存下筛选后留下的数 清空A数组 把B数组的结果复制给A数组

第三步依次按下标进行循环剔除,直到A数组小于等于3跳出循环

 

题解代码:

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#include<string.h>

int main()

{

    int n=0,i=0,j=0,m=0,a[5000]={0},b[2500]={0},len=0;

   while(scanf("%d",&n)!=EOF){

       for(i=0;i<n;i++){

           scanf("%d",&len);

           if(len==1){                     //如果士兵数量最开始就不大于三个

               printf("%d\n",len);

               continue;

           }

           if(len<=3){

               for(m=1;m<len;m++){

                    printf("%d ",m);

               }

               printf("%d\n",m);

               continue;

           }

           for(m=0;m<len;m++){

               a[m]=m+1;               //给A数组赋初值

            }

           while(len>3){

               for(m=0;m<len;m++){                                                 //剔除1212的 从0开始即保留偶数下标的

                    if(m%2==0){

                        b[j++]=a[m];

                    }

               }

               len=j;

               memset(a,0,sizeof(a));

               for(j=0;j<len;j++{

                    a[j]=b[j];

               }

               if(len<=3){

                    j=0;

                    break;

               }

               j=0;

               for(m=0;m<len;m++)                                                      //剔除123123的 从0开始即保留偶数下标的

                    if((m+1)%3!=0){

                        b[j++]=a[m];

                    }

               }

                len=j;

               memset(a,0,sizeof(a));                                            //清空a数组

               for(j=0;j<len;j++){

                    a[j]=b[j];

               }

               j=0;

           }

           for(m=0;m<len-1;m++){

               printf("%d ",a[m]);

           }

           printf("%d\n",a[m]);         //输出结果 此处应注意此题的输出格式

           memset(a,0,sizeof(a));

 

        }

    }

}

上一篇下一篇

猜你喜欢

热点阅读