解题思路:提供一种顺序正确的做。观察输出结果,可以分为4组;第一组没有4,第二组没有3,第三组没有2,第四组没有1。解决方法,分为4组,从第一组开始,使用dfs算法。dfs中有两个参数cur,cont.cur用来标记下标,cont表示想要跳过的(这组里面没有的数字)。
注意事项: dfs算法得到一个解后,记得return.
参考代码:
#include<iostream> using namespace std; int book[5]; int v[4], k[5]; void dfs(int cur,int cont) { int i; if (cur == 4) { for (i = 1; i <= 3; i++) { cout << v[i]<<" "; } cout << endl; return; } for (i = 1; i <= 4; i++) { if (book[i] == 0 && i!=cont) { book[i] = 1; v[cur] = k[i]; dfs(cur + 1,cont); book[i] = 0; } } return; } int main() { int i; for (i = 1; i <= 4; i++) cin >> k[i]; dfs(1, 4); dfs(1, 3); dfs(1, 2); dfs(1, 1); return 0; }
0.0分
19 人评分
#include<stdio.h> int main() { int b[4]; scanf_s("%d%d%d%d",&b[0], &b[1], &b[2], &b[3] ); for (int i = 0; i < 4; i++) for (int j = 0; j < 4; j++) for (int n = 0; n < 4; n++) if(i !=j && i!=n && n!=j) printf("%d %d %d\n",b[i],b[j],b[n]); return 0; }求解,为什么答案错误?
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:658 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:645 |
K-进制数 (C语言描述,蓝桥杯)浏览:955 |
出圈】指针malloc版浏览:377 |
川哥的吩咐 (C语言代码)浏览:663 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:536 |
简单的a+b (C语言代码)浏览:491 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:653 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1359 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:381 |
tw 2020-02-10 13:46:41 |
我只是输出了不同位置的组合,按理说无论输入哪四个数都没问题的啊
天涯傲天 2020-03-13 12:07:27 |
顺序不对
星空 2020-03-18 17:40:32 |
我也是显示错误,还要按顺序输出啊。。
zjc 2021-08-01 17:26:28 |
输出顺序