解题思路:
我认为最值得一提的是我收获了一个方法,来判断队列是否满足要求
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 人评分
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1334 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:582 |
IP判断 (C语言描述,蓝桥杯)浏览:1118 |
母牛的故事 (C语言代码)浏览:1045 |
A+B for Input-Output Practice (VI) (C语言代码)浏览:575 |
1126题解浏览:649 |
模拟计算器 (C++代码)浏览:885 |
简单的a+b (C语言代码)浏览:572 |
C语言程序设计教程(第三版)课后习题6.7 (C语言代码)浏览:725 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:416 |