PAT 基础编程题 7-16 求符合给定条件的整数集 (15 分)
原创
©著作权归作者所有:来自51CTO博客作者亓官劼_的原创作品,请联系作者获取转载授权,否则将追究法律责任
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;
}