🍄前言
大家好,我是一勺黑猫。今天是每日一题的第二十天,欢迎更多小伙伴加入到我们的打卡计划中,希望和你们在学习算法的路上一起进步~
🙎作者简介:一个正在努力学算法和后端的大三girl
⏳每日一题打卡地:高校算法学习社区
🎈联系方式:157543570(qq)
💨往期内容:
黑猫的每日一题
https://blog.csdn.net/xingziyy/category_11731303.html
🍄今日题目
P1008 [NOIP1998 普及组] 三连击 - 洛谷 | 计算机科学教育新生态
🌰思路:直接套用dfs模板就可以了,这种方式也保证了输出是按题目规定的大小顺序的,不用再做特殊处理了~(当然,这道题暴力也是完全没问题的)
🌰AC代码:
#include<iostream>
using namespace std;
int arr[]={1,2,3,4,5,6,7,8,9};
//交换
void swap(int *arr,int a,int b){
int t=arr[a];
arr[a]=arr[b];
arr[b]=t;
}
//判断是否符合条件
void check(){
int a=arr[0]*100+arr[1]*10+arr[2];
int b=arr[3]*100+arr[4]*10+arr[5];
int c=arr[6]*100+arr[7]*10+arr[8];
if(b==2*a&&c==3*a)
cout<<a<<" "<<b<<" "<<c<<endl;
}
//递归搜索
void dfs(int index){
if(index==8){
check();
return;
}
for(int i=index;i<9;i++){
swap(arr,index,i);
dfs(index+1);
swap(arr,index,i); //回溯
}
}
int main(){
dfs(0);
return 0;
}
如果让你有一丝收获,球球给一个三连支持!!!感谢大家