带分数 - 搜索,next_permutaion妙用

本文介绍了一种使用C++标准库中的next_permutation函数简化全排列问题的方法,并通过一个具体的蓝桥杯赛题实例展示了如何应用此函数来解决复杂的搜索问题。该方法能够有效避免手动编写繁琐的搜索模拟代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

蓝桥杯历届试题练习
搜索题,用上全排列next_permutation就不必写很烦很烦的搜索模拟了
另外,next_permutation(p,p+l);的返回值是bool型
常用在
do{
}while(next_permutation(p,p+l));
这样的环境下,应该是当其值为0时,全排列一遍生成完毕。

它的排列顺序——例如,对“abc”而言,输出为:
abc
acb
bac
bca
cab
cba

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
	freopen("a.txt","r",stdin);
	int n,p[9],cnt=0,i,j,k,w,a,b,c;
	for(i=0;i<9;i++){
		p[i]=i+1;
	}
	scanf("%d",&n);
	do{
		for(i=1;i<8;i++){
			for(j=(10-i)/2;j<9;j++){
				for(w=1,b=p[j-1],k=j-2;k>=i;k--){
					w*=10;
					b+=w*p[k];
				}
				for(w=1,c=p[8],k=7;k>=j;k--){
					w*=10;
					c+=w*p[k];
				}
				if(b%c) continue;
				for(w=1,a=p[i-1],k=i-2;k>=0;k--){
					w*=10;
					a+=w*p[k];
				}
				if(a+b/c==n){
					cnt++;
				}
			}
		}
	}while(next_permutation(p,p+9));
		printf("%d\n",cnt);
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值