7-16 求符合给定条件的整数集 (15 分)

给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

输入格式:

输入在一行中给出A。

输出格式:

输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。

输入样例:

2

输出样例:

234 235 243 245 253 254

324 325 342 345 352 354

423 425 432 435 452 453

523 524 532 534 542 543

作者: 徐镜春

单位: 浙江大学

时间限制: 400 ms

内存限制: 64 MB

代码长度限制: 16 KB

 

这题可以使用全排列+set的组合进行暴力求解

#include<iostream>
#include<set>
#include<algorithm>
#include<iterator>
using namespace std;
int main(){
int input,nums[4];
set<int> all_ans;
cin>>input;
for(int i = 0 ;i < 4;i++){
nums[i]=(input + i);
}
do{
int mid = nums[0]*100+nums[1]*10+nums[2];
all_ans.insert(mid);
}
while(next_permutation(nums, nums+4));//全排列
int i = 1;
for (set<int>::iterator it = all_ans.begin() ; it != all_ans.end(); it++) {
cout<<*it;
if(i % 6 == 0)
cout<<endl;
else
cout<<" ";
i++;

}

return 0;
}

 

也可以用粗暴的三层循环

#include<iostream>
using namespace std;
int main()
{
int a,x,y,z;
cin>>a;
int count = 0;

for (x=a;x<a+4;x++){
for (y=a;y<a+4;y++){
for (z=a;z<a+4;z++){
if (x!=y && x!=z && y!=z) {
cout<<x<<y<<z;
count++;
if ( count%6==0 ) {
cout<<endl;
} else {
cout<<" ";
}
}

}
}
}
return 0;
}