题目描述
旅行箱上的密码锁通常都只有 3 位数字,如果忘了密码,只要有足够的耐心,哪怕用逐一枚举的办法,也可以暴力破解。如果还能隐约记得数字的范围,则可以大大降低破解的工作量。
本题就请你根据用户记忆中的数字范围,列出所有可能的密码。
输入格式:
输入第一行给出一个正整数 n(≤8),随后一行列出 n 个 0 - 9 范围内的数字,是用户记忆中可能属于密码的数字。题目保证 n 个数字没有重复,数字间以空格分隔。
输出格式:
按照密码组成的 3 位数从小到大的顺序,输出这 n 个数字能组成的所有可能的 3 位数密码。要求每行输出 10 个,同行数字以 1 个空格分隔,行首尾不得有多余空格。注意:如果有前导零,也不可忽略。
输入样例:
3
5 2 8
输出样例:
222 225 228 252 255 258 282 285 288 522
525 528 552 555 558 582 585 588 822 825
828 852 855 858 882 885 888
代码:
#include <iostream>
#include <cstdio>
#include <set>
#include <algorithm>
using namespace std;
int main() {
int n , num[10];
scanf("%d",&n);
for(int i = 0 ; i < n ; ++i) {
scanf("%d" , &num[i]);
}
sort(num,num+n);
int cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
cnt++;
cout<<num[i]<<num[j]<<num[k]<<" \n"[cnt % 10 == 0 || (i == n- 1 && j == n - 1 && k == n-1)]; //换行条件在cnt%10值为0时和ijk遍历到最后一个值时
}
}
}
}
思路:
暴力解法,直接输出!!!!!!!!!!!!!!!!!!!!!!!!!!