解题思路:
我认为最值得一提的是我收获了一个方法,来判断队列是否满足要求
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二级辅导-同因查找 (C语言代码)浏览:553 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:676 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:1027 |
C语言训练-大、小写问题 (C语言代码)浏览:724 |
WU-陶陶摘苹果2 (C++代码)浏览:967 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:594 |
printf基础练习2 (C语言代码)浏览:746 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:609 |
1124题解浏览:591 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:549 |