蓝桥杯 PREV-3 带分数

蓝桥杯 PREV-3 带分数_第1张图片

题意:要求使用1-9九个数字组合,并且满足条件:输入的数 = a+b/c,abc均是由1-9中的数组成且不能重复,1-9每个都使用且使用一次,问有多少种排列方式

思路:此题就是一个全排列的问题,把1-9的排列分成a,b,c三段,满足条件即为带分数,可以使用stl库自带的next_permutation函数,此函数是一个全排列的函数,如果是最后一个排列,则返回false

代码:

#include 
#include
using namespace std;
int arr[9];//保存1-9的9个数字  
int cal(int st,int en){
	int num = 0;
	for(int i=st;i<=en;i++){
		num = num*10+arr[i];
	}
	return num;
}
int main(int argc, char** argv) {
	int a,b,c,ans = 0,num;
	cin>>num; 
	for(int i=0;i<9;i++){
		arr[i] = i+1;
	}
	do{
		for(int i=0;i<7;i++){//第一个数最多到6,七个数 
			for(int j=i+1;j<8;j++){//第二个数必须从第一个数的后面一个数开始,最多到7 
				a = cal(0,i),b = cal(i+1,j),c = cal(j+1,8);
				if(b%c==0 && num == (a+b/c)){
					ans++;
				}
			}
		} 
	}while(next_permutation(arr,arr+9));//对1-9个进行全排列 
	cout<

 

你可能感兴趣的:(蓝桥杯历年试题)