美文网首页
ACM——队

ACM——队

作者: 香儿1025 | 来源:发表于2018-02-04 11:28 被阅读0次

    知识点:

    (原理)

    队列 是一种先进先出的线性表。其限制仅在表的一端(尾端)进行插入,另一端(首端)进行删除的线性表,先进先出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));

     

            }

        }

    }

    相关文章

      网友评论

          本文标题:ACM——队

          本文链接:https://www.haomeiwen.com/subject/lvkmzxtx.html