解题思路:

我认为最值得一提的是我收获了一个方法,来判断队列是否满足要求

1元加1

2元减1

若小于0则不符合要求,排序失败

int panduan(int *A,int M,int *sum){

         int yiyuan=0;

         for(int i=0;i<M;i++){

                 if(A[i]==1)

                          yiyuan++;

                 else

                          yiyuan--;

                 if(yiyuan<0)

                          return 0;

         }

         (*sum)++;

         return 0;

}

这是我学到的最大的知识点

排列我还不是很懂

注意事项:

参考代码:

#include<stdio.h>

#include<malloc.h>

void format(int *A,int N,int K);

void pailie(int *A,int index,int length,int *sum);

void swap(int *x,int *y);

int panduan(int *A,int M,int *sum);

int main(){

         int M,N,K,sum=0;

         int *A;

         while(scanf("%d %d %d",&M,&N,&K)!=EOF)

         {

                 sum=0;

                 A=(int *)malloc(M*sizeof(int));

                 format(A,N,K);

                 pailie(A,0,M,&sum);

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

         }

         return 0;

}


void format(int *A,int N,int K){        //把所有的孩子手中的钱排进A中,先1后2

         for(int i=0;i<(N+K);i++){

                 if(i<N)

                         A[i]=1;

                 else

                          A[i]=2;

         }

}


void pailie(int *A,int index,int length,int *sum){        //排列

         int j=0;

         if(index==length){

                  panduan(A,length,sum);

         }else{

                 for(j=index;j<length;j++){

                         swap(&A[j],&A[index]);

                         pailie(A,index+1,length,sum);

                         swap(&A[j],&A[index]);

                 }

         }

}


void swap(int *x,int *y){        //两个变量互相交换值

         int z=(*x);

         (*x)=(*y);

         (*y)=z;

}


int panduan(int *A,int M,int *sum){

         int yiyuan=0;

         for(int i=0;i<M;i++){

                 if(A[i]==1)

                          yiyuan++;

                 else

                          yiyuan--;

                 if(yiyuan<0)

                          return 0;

         }

         (*sum)++;

         return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论