25 条题解
-
51
这个题目很像L9/6第五个挑战,代码粘过来稍稍改一下就行。
#include <bits/stdc++.h>//题解为hetao1098709制作 //开局倒入万能库,啊是个人都会这么做,不然你得敲好几行代码。
using namespace std; int main() {//啊导入主函数,是个人都会
int n, zhenwuyu[15]; cin >> n;//你得先知道要循环几次吧
for (int i = 1; i <= n; i++) { cin>>zhenwuyu[i];//然后你得把所有数据输 进来存起来吧,我定义了一个数组。 }
sort(zhenwuyu+1,zhenwuyu+n+1);//一定不要落了排序,不排序代码是不能AC的~
do//这部分就是课上讲的重中之重,也是整道题的核心代码 { for(int i=1;i<=n;i++) { cout<<zhenwuyu[i]<<" "; } cout<<endl; } while(next_permutation(zhenwuyu+1,zhenwuyu+n+1)); //为什么我上面说一定要排序呢? //因为这里的do_while只能输出升序排序的方法 //也就是说如果输入向4 1 2 3这四个数,你的代码只能输出 //4 1 2 3、4 1 3 2、4 2 1 3、4 2 3 1、4 3 1 2、4 3 2 1 这几种方式。 //但是你只要加上sort就不一样了,sort帮你自动从小到大排序了,这样你再使用next_permutation的时候就是从头开始每种情况都能输出了。
return 0;//想加就加,懒得加就别加,反正都能AC。但是既然是题解,还是要加一下下的。 }//括号绝对不能忘了,忘了能无语死你。
想要完整代码? 诶,别急别急,这不来了吗。 (他来了,他来了,他迈着正步来了)
#include <bits/stdc++.h> using namespace std; int main() { int n, zhenwuyu[15]; cin >> n; for (int i = 1; i <= n; i++) { cin>>zhenwuyu[i]; } sort(zhenwuyu+1,zhenwuyu+n+1); do { for(int i=1;i<=n;i++) { cout<<zhenwuyu[i]<<" "; } cout <<endl; } while(next_permutation(zhenwuyu+1, zhenwuyu+n+1));//这里加了一个空格。 return 0; }
-
7
P1016
-题目回顾-
给出n个数字,求这n个数字的全排列。
-分析-
没什么好讲的,如果不会做,再回去看看L9-6-5^_^
-代码-
#include <bits/stdc++.h> using namespace std; int main()//by AGOMG { int n, num[15]; cin >> n; for (int i = 1; i <= n; i++) { cin >> num[i]; } sort(num + 1, num + n + 1); do { for(int i = 1; i <= n; i++) { cout << num[i] << ' '; } cout << endl; } while(next_permutation(num + 1, num + n + 1)); return 0; }
-
4
开局导入万能库(国际惯例)
#include <bits/stdc++.h>
cin后使用sort进行排序
因为是按照字典序
sort(num+1,num+n+1);
do_while循环很简单 这里不多说了
next_permutation(num+1,num+n+1)
全代码:
#include <bits/stdc++.h> using namespace std; int main() { int n, num[15]; cin >> n; for (int i = 1; i <= n; i++) { num[i] = i; } do { for(int i=1;i<=n;i++)cout<<num[i]<<' '; cout<<endl; }while(next_permutation(num+1,num+n+1)); return 0; }
-
3
要解决这个问题,我们可以使用C++的STL库中的
next_permutation
函数来生成全排列。
先上代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } sort(nums.begin(), nums.end()); // 将数字按升序排序 do { for (int i = 0; i < n; i++) { cout << nums[i] << " "; } cout << endl; } while (next_permutation(nums.begin(), nums.end())); return 0; }
在这段代码中,我们首先读取输入的n和n个整数,将它们存储在一个vector中。然后,我们使用
sort
函数将数字按照升序排序。接下来,我们使用
do-while
循环和next_permutation
函数来生成全排列。next_permutation
函数会在每次调用时生成下一个排列,直到所有排列都被生成完毕。在每次生成的排列中,我们使用循环遍历并输出其中的每个数字。
请注意,这段代码假设输入的整数是唯一的,没有重复的数字。如果存在重复的数字,
next_permutation
函数会按照字典序生成所有不同的排列。 -
2
首先,输入数据
int n, num[15]; cin >> n; for (int i = 1; i <= n; i++) { cin >> num[i]; }
将数据从小到大排列
sort(num + 1, num + n + 1);
非常简单的全排列
do { for(int i = 1; i <= n; i++) { cout << num[i] << ' '; } cout << endl; } while(next_permutation(num + 1, num + n + 1));
最终代码
#include <bits/stdc++.h>//hetao1083217 using namespace std; int main() { int n, num[15]; cin >> n; for (int i = 1; i <= n; i++) { cin >> num[i]; } sort(num + 1, num + n + 1); do { for(int i = 1; i <= n; i++) { cout << num[i] << ' '; } cout << endl; } while(next_permutation(num + 1, num + n + 1)); return 0; }
-
2
这个和本课时的作业很像,只要略微修改就可以了。
#include<bits/stdc++.h> #define np next_permutation #define whlie while #define retrun return using namespace std; int n,a[11]; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); //排序 do{ for(int i=1;i<=n;i++){ cout<<a[i]<<" "; //输出 } cout<<endl; }whlie(np(a+1,a+n+1)); //使用next_permutation() retrun 0; }
代码看似不能过,实则能过(你可以把那些define的去掉,然后把乱码改掉即可)
-
1
# 这题很简单,只要挨个枚举就可以了。 上代码 #include<bits/stdc++.h> using namespace std; int a[15]; int main(){ int n; cin>>n; for (int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1);//为了保证最后结果齐全,先要排序 do{ for (int i=1;i<=n;i++) cout<<a[i]<<" "; cout<<endl; }while (next_permutation(a+1,a+n+1));//全排列 return 0; }
-
1
dfs即可
#include <bits/stdc++.h> #define ll long long #define endl "\n" using namespace std; int n, a[15], b[15]; bool v[15]; void dfs(int d) { if (d > n) { for (int i = 1; i <= n; i++) { cout << b[i] << " "; } cout << endl; return; } for (int i = 1; i <= n; i++) { if (!v[i]) { v[i] = 1; b[d] = a[i]; dfs(d + 1); v[i] = 0; } } } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; } sort(a + 1, a + n + 1); dfs(1); return 0; }
-
1
本节课我们学习用next_permutation() 函数与do{ }while()循环,不要忘记函数库algorithm 代码如下:
#include <bits/stdc++.h> #include <algorithm> using namespace std; int main() { int n,num[15]; cin >> n; for (int i=1;i <= n;i++) { cin>>num[i]; } sort(num+1,num+n+1); do { for(int i=1;i<=n;i++) { cout<<num[i]<<' '; } cout<<endl; } while(next_permutation(num+1,num+n+1)); return 0; }
-
1
P1016 全排列
题目描述
给出n个数字,求这n个数字的全排列。
思路
用全排列的代码呗:
for (int i = 1; i <= n; i++) { num[i] = i; } do { for(int i = 1;i <= n;i++) { cout << num[i] << " "; } cout << endl; } while(next_permutation(num + 1,num + n + 1));
不过注意:
1.头文件,可以直接万能,也可以
iostream
和algorithm
;2.起始地址和终止地址。
参考代码:
#include <iostream>//hetao3097453 #include <algorithm> using namespace std; int num[10]; int main() { int n; cin >> n; for(int i = 1;i <= n;i++) { cin >> num[i]; } sort(num + 1,num + n + 1); do { for(int i = 1;i <= n;i++) { cout << num[i] << " "; } cout << endl; } while(next_permutation(num + 1,num + n + 1)); return 0; }
hetao3097453
2023年4月7日
-
0
题目分析:
题目是让我们写一个程序,输入n,和n个整数,输出这n个整数的全排列
解题思路:
先定义变量n,再写for循环,输入到数组中,再根据教材上的全排模版,写好各个参数,输出就行了,但是要注意,每输出一个情况,就要写一个换行
参考代码
#include <bits/stdc++.h> using namespace std; int n,num[20]; int main() { cin >> n; for (int i = 1;i <= n;i++) { cin >> num[i]; } sort(num + 1,num + n + 1); do{ for (int i = 1;i <= n;i++) { cout << num[i] << " "; } cout << endl; }while (next_permutation(num + 1,num + n + 1)); return 0; }
-
-1
#include <bits/stdc++.h> using namespace std; int main() { int n, zhenwuyu[15]; cin >> n; for (int i = 1; i <= n; i++) { cin>>zhenwuyu[i]; } sort(zhenwuyu+1,zhenwuyu+n+1); do { for(int i=1;i<=n;i++) { cout<<zhenwuyu[i]<<" "; } cout <<endl; } while(next_permutation(zhenwuyu+1, zhenwuyu+n+1));//这里加了一个空格。 return 0; }
-
-1
全排列
这个应该都会吧,基础题上代码!
#include <iostream>//hetao8554411. #include <deque>//刻意烤驴食用双端队列孑孓 //上面注释打错了,但好像是故意的(可以考虑使用双端队列解决) #include <algorithm> using namespace std; int main() { int n; cin >> n; deque<int> ans(n); ans.push_front(0); //先往ans里扔一个0,不然结果会出错 for (int i = 1;i <= n;i++) cin >> ans[i]; sort(ans.begin(),ans.end()); //排序 do { for (int i = 1;i <= n;i++) cout << ans[i] << " "; cout << endl; } while(next_permutation(ans.begin() + 1,ans.end()));//这个懂的都懂 return 0; }
点赞再抱走,b站号看主页
-
-2
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } sort(nums.begin(), nums.end()); do { for (int i = 0; i < n; i++) { cout << nums[i] << " "; } cout << endl; } while (next_permutation(nums.begin(), nums.end())); return 0; }
信息
- ID
- 2
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 2599
- 已通过
- 1277
- 上传者