灿烂的神


私信TA

用户名:Frank3821

访问量:18007

签 名:

十月一日那天,祝你幸福!

等  级
排  名 534
经  验 4305
参赛次数 2
文章发表 42
年  龄 23
在职情况 学生
学  校 临沂大学
专  业 计算机科学与技术

  自我简介:

每走一次捷径,就会丧失一点人性!

解题思路:

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

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 人评分

  评论区