旅行箱上的密码锁通常都只有 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<bits/stdc++.h>//这题刚开始想复杂了,以为如果有n个数,那么组合出来也是n位数
using namespace std;
int main(){
int n,a[10],i,j,k,y=0;
cin>>n;
for(i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
for(i=0;i<n;i++){
for(j=0;j<n;j++){
for(k=0;k<n;k++)
{
if(y!=0)cout<<' ';
printf("%d%d%d",a[i],a[j],a[k]);因为有0存在,所以需要用printf控制输出,也可以用%03d。
y++;
if(y==10){cout<<endl;y=0;}
}
}
}
return 0;
}